运行脚本时出现sql语法错误

时间:2018-04-24 22:28:22

标签: mysql error-handling

我有一个sql脚本,可以在我的数据库上运行用户表和订单表。用户表部分工作正常,当我尝试将外键作为订单表的一部分时出现问题。

这是我的剧本:

CREATE TABLE `orders` (
`id` int(11) NOT NULL,
`order_id` INT(11) NOT NULL AUTO_INCREMENT,
`Heigth` INT(11),
`Width` INT(11),
`Length` INT(11),
`status` BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (`order_id`),
foreign key (`id`) references `users`(`id`)
)  ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=LATIN1;

insert into `orders` values
(1, 1, 5, 6 ,7, true),
(2, 2, 234, 234, 4, false);

这是我得到的错误:     错误1064(42000):您的SQL语法有错误;检查     手册,对应右边的MySQL服务器版本     要在''order_id'附近使用的语法,),     外键('id')引用users('id')     )发动机= INNODB AU'在第8行     ERROR 1146(42S02):表'useradmin.orders'不存在

怎么会这样?它由mysql workbench自动生成

1 个答案:

答案 0 :(得分:0)

在我做了CREATE TABLE users (id INT(11) NOT NULL PRIMARY KEY) ENGINE=INNODB;之后,问题中显示的语句成功执行了。

错误文本似乎表明执行的SQL与问题中发布的SQL文本不同。特别是,错误消息似乎表示单引号字符,其中发布的SQL具有反引号。

... near ''order_id'), foreign key ('id') references `users` ('id') ) 
          ^        ^                ^  ^                      ^  ^

(在MySQL中,标识符通常使用反引号进行转义,完全如问题中的SQL语句所示。单引号用于字符串文字。)

在我们进一步调查之前,请确认正在执行的语句(并导致错误)是问题中发布的SQL,我的意思是完全正确到最后一个挑剔的反引号字符。