【问题标题】:How to add foreign key to MySQL table?如何将外键添加到 MySQL 表?
【发布时间】:2013-07-10 22:16:14
【问题描述】:

我使用MySQL 和InnoDB 引擎。我仔细检查了列的类型。但总是有:

Error Code: 1215. Cannot add foreign key constraint

我试过了:

ALTER TABLE `mail`.`boxes`  
    ADD CONSTRAINT FK_id 
    FOREIGN KEY (id) 
    REFERENCES `mail`.`users` (id)
    ON UPDATE NO ACTION 
    ON DELETE NO ACTION; 

和

ALTER TABLE `mail`.`boxes` 
  ADD FOREIGN KEY (id)
  REFERENCES `mail`.`users` (id)

没有任何作用(((

请帮忙,我做错了什么(除了选择 MySQL :-))?

【问题讨论】:

    标签: mysql database foreign-keys foreign-key-relationship alter-table


    【解决方案1】:

    如果表包含数据,那么您将无法添加外键删除表对象并重新创建 使用下面的参考相同

    Basics of Foreign Keys in MySQL?

    【讨论】:

      【解决方案2】:

      要检查到底是什么问题,请使用:

      SHOW ENGINE INNODB STATUS\G

      有“最后一个外键错误”部分。看:http://dev.mysql.com/doc/refman/5.0/en/innodb-monitors.html

      我的猜测是数据类型 od mail.boxes (id) 和 mail.users (id) 不一样。 (例如,一张表中的 smallint 和第二张表中的整数)。

      您尝试创建 FK 的表中的数据也可能有问题(您的邮箱 ID 是否与现有用户的 ID 相同?)

      【讨论】:

      • 我从表中删除了所有数据并再次检查了数据类型,它们是相同的(
      • INNODB STATUS 会这样写:在被引用的表中找不到被引用列作为第一列出现的索引,或者表中的列类型与被引用表的约束不匹配。请注意,使用 >= InnoDB-4.1.12 创建的表中 ENUM 和 SET 的内部存储类型发生了变化,并且旧表中的此类列不能被新表中的此类列引用。有关正确的外键定义,请参阅 dev.mysql.com/doc/refman/5.1/en/…。
      • mail.users (id) 列有索引吗?例如。在该列上创建主键应该会有所帮助。
      • 是的 mail.users (id) 已经是主键,但仍然不起作用(
      • 你能为这两个表提供 DDL('CREATE TABLE' 语句)吗?也许,我不知道,mail.boxes.id 是 AUTOINCREMENT 吗? 'id' 也是 mail.boxes 表中的主键吗?尝试创建另一列(例如 user_id)并在其上创建 FK:ALTER TABLE mail.boxes ADD FOREIGN KEY (user_id) REFERENCES mail.users (id)。
      猜你喜欢
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2018-07-19
      • 2023-01-05
      • 1970-01-01
      相关资源
      最近更新 更多