对于mysql添加外键约束时,提示语法错误的很令人抓狂,这里我将我遇到的情况分享一下,因为截至发稿,好像还见有人遇过
首先我们要确认一下添加外键约束格式
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键)
REFERENCES 参照表(参照表主键)
[ON DELETE{CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE{CASCADE | SET NULL | NO ACTION | RESTRICT}]
我有需要,建立一个用户登陆日志表(usr_log),和一个用户信息表(usr),现在要日志表的Id参照用户表的Id,结果就保语法错误了
ALTER TABLE usr_log ADD CONSTRAINT id_usr FOREIGN KEY id REFERENCES usr(Id) ON DELETE RESTRICT ON UPDATE RESTRICT;
细心的同学应该发现问题了, 其实就是从表外键那里少了一个()
正确格式如下
ALTER TABLE usr_log ADD CONSTRAINT id_usr FOREIGN KEY (id) REFERENCES usr(Id) ON DELETE RESTRICT ON UPDATE RESTRICT;
有的童鞋,有时候,没少外键两边的圆括号,但是依然语法错误,这时候要考虑是不是因为表明或列名和mysql保留的关键字冲突,你可以尝试在键名两边加倒引号,也就是键盘左上角Esc键下面的按键
ALTER TABLE usr_log ADD CONSTRAINT id_usr FOREIGN KEY (`id`) REFERENCES usr(`Id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
或者如下,再在表名和两边也加上
ALTER TABLE `usr_log` ADD CONSTRAINT `id_usr` FOREIGN KEY (`id`) REFERENCES `usr`(`Id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
如果还是提示如下
语法错误的话,就肯定是关键字写错了,自己一个一个比对吧
ERROR 1064 (42000): You have an error in your SQL syntax;