【发布时间】:2011-05-12 02:26:41
【问题描述】:
我有一个最初位于 MyISAM 中的数据库,因此没有外键约束。结果,有相当多的孤立行,其中外键引用的记录已被删除。
为了解决这个问题,我决定转换为 InnoDB 并添加外键,并使用 CASCADE 进行更新和删除。但是,当我尝试添加外键时,我收到这样的错误(来自 Navicat 8 控制台):
1452 - Cannot add or update a child row: a foreign key constraint fails
(`database`.`#sql-1358_38d`, CONSTRAINT `#sql-1358_38d_ibfk_1` FOREIGN KEY
(`manufacturerID`) REFERENCES `manufacturer` (`ID`) ON DE)
我知道它为什么这样做 - 因为孤立的行。有没有办法让约束的创建自动清除这些行?遍历所有表并找到孤立行将需要很长时间。
这是我正在运行的查询之一,以防万一:
ALTER TABLE part_number ADD CONSTRAINT
FOREIGN KEY(manufacturerID)
REFERENCES manufacturer(ID)
ON DELETE CASCADE
ON UPDATE CASCADE;
【问题讨论】:
标签: mysql foreign-keys innodb