【问题标题】:MySQL Error Code 1215: Cannot add foreign key Constraint on ALTER TABLE : MysqlMySQL 错误代码 1215:无法在 ALTER TABLE 上添加外键约束:Mysql
【发布时间】:2015-11-14 02:10:14
【问题描述】:

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

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

我已经在下面列出的“tbl_users_meta”上创建了索引“user_id”:

这是我的查询,但我每次都得到(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;

【问题讨论】:

  • 两个表在同一个数据库中?
  • 是的,两者都在同一个数据库中
  • 检查mysql错误日志并分享详细信息...
  • 我在本地 WAMP 服务器上工作,我可以在哪里找到 MySQL 错误日志?

标签: php mysql join normalization


【解决方案1】:

尝试使用您编写的相同查询并稍作修改:

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;

希望能成功

【讨论】:

  • 使用这个得到同样的错误 - #1215 - 无法添加外键约束
  • 您是否尝试在两个表名前指定database_name
【解决方案2】:

我看不出你写的有什么问题,所以一定有你没有发布的东西影响了问题。例如,在 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;

...以您的确切问题陈述结束,复制和粘贴,并且工作正常。

正如我在 cmets 中提到的,我怀疑存在索引丢失或数据类型不匹配的问题。您可能会发现添加以下输出会有所帮助:

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

...回答你的问题。

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2015-05-27
    • 2017-09-18
    • 2014-10-22
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多