将外键添加到MySQL表错误:ERROR 1215(HY000):无法添加外键约束

时间:2017-04-06 16:08:45

标签: mysql foreign-keys

当我尝试向表中添加外键约束时,有人可以解释为什么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版本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

1 个答案:

答案 0 :(得分:1)

导致错误的可能性很可能是:

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

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

  • workflow_stakeholder_sectors中存在一些引用workflow_stakeholder缺少的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