我参与了一个项目,将一个项目从甲骨文迁移到MySQL。在Oracle中,当通过命令行运行批处理时,我能够创建引用或包含其他外部SQL脚本文件的SQL脚本。我在内部有一个名为CreateAllTables.sql的脚本,它看起来像这样:
@tables\Site.sql
@tables\Language.sql
@tables\Country.sql
@tables\Locale.sql
@tables\Tag.sql我已经知道MySQL命令行“源”命令,但我的目标是通过一个命令行调用调用一个包含其他脚本的主.sql脚本文件,如下所示:
mysql --user=root --password --database=junkdb -vv < CreateAllTables.sql因此,我的问题是如何使用MySQL来实现这一点?
发布于 2009-12-30 03:32:29
source为我工作。
# -- foo.sql
DROP TABLE foo;
source bar.sql
# -- bar.sql
CREATE TABLE bar (i INT NOT NULL);
$ mysql ... < foo.sql现在,表foo消失了,bar被创建了。
发布于 2012-10-09 05:07:27
请注意,上面的"source“选项只有在脚本通过支持它的mysql客户端运行时才有效(对我来说)。(OP的原始问题中提到的mysql命令行客户端恰好就是这些客户端之一。)
但请记住,“源”是,而不是语言的许多特定于mysql的扩展之一。它是客户端命令,而不是sql语句,
你为什么这么在意?
如果您通过另一种方法(例如,通过JDBC的"execSQL“)将sql脚本发送到源服务器,则”MySQL“命令对于包含其他脚本将不起作用。
发布于 2009-12-30 03:38:56
您可以在mysql中对source执行类似的操作。
我有包含这些内容的inc1.sql:
use test;
create table testinc(
id int
);像这样的inc2.sql:
insert into testinc values (1);main.sql是这样的:
source inc1.sql
source inc2.sql我可以像这样运行main.sql:
mysql -uroot -pmysql -P3351 -e"Source main.sql"在此之后,我可以通过执行以下操作来验证它是否有效:
mysql> use test;
Database changed
mysql> select * from testinc;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)https://stackoverflow.com/questions/1976396
复制相似问题