我有一个 MySQL 表,我想添加一个外键约束。
在这种情况下,它是一个自引用键......
CREATE TABLE `contracts` (
`id` int(11) NOT NULL auto_increment,
`contract_id_amend_source` int(11) default NULL,
# ...
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14834 DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;
(我在这里使用的是遗留数据库——我没有想出列名。)
我尝试像这样应用密钥...
ALTER TABLE contracts
ADD CONSTRAINT fk_parent_id
FOREIGN KEY ( contract_id_amend_source )
REFERENCES contracts( id )
ON DELETE CASCADE;
但我得到一个错误...
无法添加或更新子行:外键约束失败 (
contract_tracker/#sql-e18_e9d0a
, CONSTRAINTfk_parent_id
FOREIGN KEY (contract_id_amend_source
) REFERENCEScontracts
(id
) ON DELETE CASCADE)
好的,有一些无效parent_id
的s。
我试着像这样找到他们......
SELECT id, contract_id_amend_source
FROM contracts
WHERE contract_id_amend_source
NOT IN (
SELECT id
FROM contracts
);
这将返回大约 20 条记录。我手动修复钥匙。然后再次运行上述查询。现在它不返回任何记录。
我再次尝试ADD
FK,但仍然收到“无法添加或更新...”错误。
我想我查找坏键的查询一定是错误的?我该如何解决?