【问题标题】:Adding Foreign Key to MySQL table errors out: ERROR 1215 (HY000): Cannot add foreign key constraint向 MySQL 表添加外键错误:ERROR 1215 (HY000):无法添加外键约束
【发布时间】:2017-09-01 19:03:11
【问题描述】:

当我尝试向表中添加外键约束时,有人可以解释为什么 MySQL 会出错。

这是我的桌子:

mysql> desc workflow_stakeholder_sectors;
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| id             | int(11) | NO   | PRI | NULL    | auto_increment |
| stakeholder_id | int(11) | NO   |     | NULL    |                |
| sector_id      | int(11) | NO   |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> desc workflow_stakeholder;
+---------------------------------+--------------+------+-----+---------+----------------+
| Field                           | Type         | Null | Key | Default | Extra          |
+---------------------------------+--------------+------+-----+---------+----------------+
| id                              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name                            | varchar(255) | YES  |     | NULL    |                |
| stakeholder_register            | tinyint(1)   | NO   |     | NULL    |                |
| create_date                     | datetime     | YES  |     | NULL    |                |
| edit_date                       | datetime     | YES  |     | NULL    |                |
| country_id                      | int(11)      | NO   | MUL | NULL    |                |
| formal_relationship_document_id | int(11)      | YES  | MUL | NULL    |                |
| sector_id                       | int(11)      | YES  | MUL | NULL    |                |
| type_id                         | int(11)      | YES  | MUL | NULL    |                |
| vetting_document_id             | int(11)      | YES  | MUL | NULL    |                |
| approval                        | varchar(255) | YES  |     | NULL    |                |
| approved_by_id                  | int(11)      | YES  | MUL | NULL    |                |
| filled_by_id                    | int(11)      | YES  | MUL | NULL    |                |
+---------------------------------+--------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)

我正在使用 macOS Sierra 版本 10.12.4 和 mysql Ver 14.14 Distrib 5.7.17,用于使用 EditLine 包装器的 macos10.12 (x86_64)

我使用下面的mysql语句来添加外键:

ALTER TABLE `workflow_stakeholder_sectors` ADD CONSTRAINT 
`workflow_stak_stakeholder_id_b87707c1_fk_workflow_stakeholder_id` 
FOREIGN KEY (`stakeholder_id`) REFERENCES `workflow_stakeholder` (`id`);

我得到的错误是:

ERROR 1215 (HY000): Cannot add foreign key constraint

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    错误原因的可能原因是:

    • 一个或两个表是 MyISAM 或其他一些存储引擎,而不是 InnoDB。

      感谢您至少为您的表格发布了DESC 输出, 但是DESC 没有显示存储引擎。 SHOW CREATE TABLE 显示 这些信息。

    • workflow_stakeholder_sectors 中存在一些行,它们引用了 workflow_stakeholder 中缺少的涉众 ID 值。尝试以下查询:

      SELECT COUNT(*) FROM workflow_stakeholder_sectors wss 
      LEFT OUTER JOIN workflow_stakeholder ws
        ON wss.stakeholder_id = ws.id
      WHERE ws.id IS NULL
      

    【讨论】:

    • 谢谢!正如您所指出的,问题在于一个表具有 MISAM 存储引擎,而另一个表具有 innodb。
    猜你喜欢
    • 2013-09-26
    • 2014-03-27
    • 2018-09-09
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多