我正在尝试编写一个创建多个表的 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 文件的回答中的极端案例示例。
创建表语法看起来不错。您用来执行 SQL 的工具可能只执行第一条语句。
试试这个:
使用数据库名称;
创建表 a..;创建表 b..;创建表 c..;
表是否相互引用(例如主键等)?表是按顺序创建的,因此如果您的第二个表正在引用尚未创建的表,它将失败。
你如何执行你的脚本?如果你从命令行执行它应该是这样的:
mysql -u[username] -p[password] --database DataBase1 < scriptname.sql