MySQL多CREATE TABLE语法帮助?

5

我正在尝试编写一个创建多个表的MySQL脚本。我有:

CREATE TABLE `DataBase1`.`tbl_this`(
...
);
CREATE TABLE `DataBase1`.`tbl_that`(
...
);
... (14 more) ...

然而,只有第一个 CREATE TABLE 语句会被执行。我没有收到任何语法错误的提示。那么,我是不是缺少MSSQL版本中等价于 GO 的命令?在这里我做错了什么呢?我该如何让所有的表都运行起来呢?

5个回答

6

您是如何执行此脚本的?

如果您试图以编程方式运行它,则应该知道MySQL API默认情况下仅执行一个语句。您不能使用分号将它们串在一起并期望它运行所有语句。

您可以在循环中单独执行每个CREATE TABLE语句,或者您可以通过将其作为输入提供给mysql命令行客户端来运行脚本。

在应用程序中编写通用脚本运行器类并不像看起来那么容易,因为完整的脚本语法包括许多特殊情况。

请参阅我对从PHP内部加载.sql文件的回答中的特殊情况示例。


这正是问题所在,MySQL Query Browser只处理第一个命令。我会标记@Florian_Gutmann,因为他是第一个并且可以使用点数(与48K相比...天哪!你正在与Skeet竞争吗?),必须用声望钓鱼:)。 - rlb.usa
哈哈!没问题,@Florian确实是第一个。是的,MySQL Query Browser的查询界面就像在应用程序代码中运行单个语句一样,它运行一个语句。Query Browser还应该有一个“运行SQL脚本…”菜单选项,您可以使用它来执行来自文件的多个语句。 - Bill Karwin
脚本接口只能一次执行一个MySQL命令。这其实是一件好事:它减小了SQL注入的自动化影响。有些环境可以提供对多个语句的接口,例如在C API级别使用MYSQL_OPTION_MULTI_STATEMENTS_ON,或者在PHP中使用mysqli_multi_query - bobince

4
创建表的语法看起来很好。可能是您用于执行SQL的工具只执行了第一个语句。

2

试试这个:

使用数据库名称;

创建表a..; 创建表b..; 创建表c..;


糟糕,没有任何表被创建。 - rlb.usa
我可以确认这个操作确实创建了表A,但没有创建B或C。 - DerpyNerd

0

这些表是否相互引用(例如主键等)?表是按顺序创建的,因此如果您的第二个表引用尚未创建的表,则会失败。


0
你如何执行你的脚本? 如果你是从命令行执行,应该像这样:
mysql -u[username] -p[password] --database DataBase1 < scriptname.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接