我正在尝试编写一个创建多个表的MySQL脚本。我有:
CREATE TABLE `DataBase1`.`tbl_this`(
...
);
CREATE TABLE `DataBase1`.`tbl_that`(
...
);
... (14 more) ...
然而,只有第一个 CREATE TABLE
语句会被执行。我没有收到任何语法错误的提示。那么,我是不是缺少MSSQL版本中等价于 GO
的命令?在这里我做错了什么呢?我该如何让所有的表都运行起来呢?
我正在尝试编写一个创建多个表的MySQL脚本。我有:
CREATE TABLE `DataBase1`.`tbl_this`(
...
);
CREATE TABLE `DataBase1`.`tbl_that`(
...
);
... (14 more) ...
然而,只有第一个 CREATE TABLE
语句会被执行。我没有收到任何语法错误的提示。那么,我是不是缺少MSSQL版本中等价于 GO
的命令?在这里我做错了什么呢?我该如何让所有的表都运行起来呢?
您是如何执行此脚本的?
如果您试图以编程方式运行它,则应该知道MySQL API默认情况下仅执行一个语句。您不能使用分号将它们串在一起并期望它运行所有语句。
您可以在循环中单独执行每个CREATE TABLE
语句,或者您可以通过将其作为输入提供给mysql
命令行客户端来运行脚本。
在应用程序中编写通用脚本运行器类并不像看起来那么容易,因为完整的脚本语法包括许多特殊情况。
请参阅我对从PHP内部加载.sql文件的回答中的特殊情况示例。
试试这个:
使用数据库名称;
创建表a..; 创建表b..; 创建表c..;
这些表是否相互引用(例如主键等)?表是按顺序创建的,因此如果您的第二个表引用尚未创建的表,则会失败。
mysql -u[username] -p[password] --database DataBase1 < scriptname.sql
MYSQL_OPTION_MULTI_STATEMENTS_ON
,或者在PHP中使用mysqli_multi_query
。 - bobince