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