2015-08-20 81 views
1

我想在我現有的表添加外鍵約束(InnoDB類型) ,我在下面列出兩個表:的MySQL錯誤代碼1215:不能在ALTER TABLE添加外鍵約束:Mysql的

tbl_users : [ user_id(INT,AUTO_INCREMENT), user_name,--- etc] 
tbl_users_meta : [ user_meta_id(INT,AUTO_INCREMENT), user_id(INT),--- etc] 

我已經創建了索引 'USER_ID' 開 'tbl_users_meta' 如下:

enter image description here

這裏是我的查詢但我每次都得到(MySQL錯誤代碼1215:)。我能得到它的問題是什麼?

ALTER TABLE `tbl_users_meta` 
ADD CONSTRAINT `fk users user_id` 
FOREIGN KEY (`user_id`) REFERENCES 
`sanskrut`.`tbl_users`(`user_id`) 
ON DELETE NO ACTION ON UPDATE CASCADE; 
+0

兩個表都在相同的數據庫? –

+0

是都在同一分貝 –

+0

檢查mysql錯誤日誌和共享詳細信息... –

回答

0

嘗試用你有一個小的修改writen相同的查詢:

ALTER IGNORE TABLE `tbl_users_meta` 
ADD CONSTRAINT `fk users user_id` 
FOREIGN KEY (`user_id`) REFERENCES 
`sanskrut`.`tbl_users`(`user_id`) 
ON DELETE NO ACTION ON UPDATE CASCADE; 

希望它會工作

+0

使用此命令獲取相同的錯誤 - #1215 - 無法添加外鍵約束 –

+0

您是否嘗試在兩個表名之前指定'database_name'? –

+0

是的,我也試過這個。 –

0

我看不出什麼毛病你寫的,所以一定有你沒有發佈的東西影響問題。例如,在MySQL版本44年5月5日,我可以成功執行以下命令:

CREATE DATABASE sanskrut; 
USE sanskrut; 
CREATE TABLE tbl_users (user_id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(50)); 
CREATE TABLE tbl_users_meta (user_meta_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT); 
CREATE INDEX user_id ON tbl_users_meta (user_id); 
ALTER TABLE `tbl_users_meta` 
ADD CONSTRAINT `fk users user_id` 
FOREIGN KEY (`user_id`) REFERENCES 
`sanskrut`.`tbl_users`(`user_id`) 
ON DELETE NO ACTION ON UPDATE CASCADE; 

...與您的具體問題的陳述,複製和粘貼完成,而且工作得很好。

正如我在評論中提到的那樣,我懷疑有索引缺失或數據類型不匹配。您可能會發現它有助於添加輸出:

DESC tbl_users; 
DESC tbl_users_meta; 
SHOW indexes FROM tbl_users; 
SHOW indexes FROM tbl_users_meta; 

...你的問題。

相關問題