mysql 新增外來鍵約束時,提示語法錯誤
阿新 • • 發佈:2019-02-10
對於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;