我有一个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自动生成
答案 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,我的意思是完全正确到最后一个挑剔的反引号字符。