MySQL错误代码1215:无法在ALTER TABLE:Mysql上添加外键约束

时间:2015-08-20 12:22:02

标签: php mysql join normalization

我想在现有表上添加外键约束(类型为InnoDB) ,我有两张表格如下:

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 ' on' 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;

2 个答案:

答案 0 :(得分:0)

使用相同的查询进行TRY并进行少量修改:

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;

希望它能够正常工作

答案 1 :(得分:0)

我看不出你所写的内容有什么问题,所以必须有一些你没有发布影响问题的东西。例如,在MySQL版本5.5.44上,我可以成功执行以下命令:

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;

......对你的问题。