我想在现有表上添加外键约束(类型为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 '列出如下:
这是我的查询,但每次都得到(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)
使用相同的查询进行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;
......对你的问题。