2017-04-06 86 views
1

有人可以阐明当我尝试向表中添加外键约束时MySQL错误输出的原因。将外键添加到MySQL表错误输出:错误1215(HY000):无法添加外键约束

这里是我的表:

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版本塞拉利昂和10.12.4的MySQL版本14.14 DISTRIB 5.7.17,使用macos10.12下(x86_64)EditLine包装

我用下面的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

为错误的原因可能的可能性是:

  • 一个或两个表是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 
    
+0

谢谢!正如你指出的那样,问题是一个表有MYISAM存储引擎,另一个表有innodb。 – user4426017

相关问题