如果我的外键引用同一张表的主键,我该如何级联删除?

时间:2019-03-31 08:19:39

标签: mysql

我正在使用mysql,当我尝试制作一个外键,该外键引用删除时级联的同一张表的主键时,会给出错误消息

操作失败:将SQL脚本应用于数据库时出错。 错误1452:无法添加或更新子行:外键约束失败(logault_final#sql-10f0_17,CONSTRAINT parent_category外键(parent_cat)参考categorycat_id)删除级联上)

我确实找到了一个hack,但是很多人强调不要这样做,我可以将foreign_key_check = 0设置为“ 1”,然后将其设置回1,然后执行sql脚本。

ALTER TABLE `logault_final`.`category` 
ADD CONSTRAINT `parent_category`
  FOREIGN KEY (`parent_cat`)
  REFERENCES `logault_final`.`category` (`cat_id`)
  ON DELETE CASCADE
  ON UPDATE NO ACTION;

'''

1 个答案:

答案 0 :(得分:0)

仅凭猜测:您已经在表中添加了外键定义的数据了吗?也许在您的字段parent_cat中有无效引用的记录?在建立FK之前,您必须更正这些引用。

只需尝试查找无效记录:

select a.* 
from logault_final.category a
left join logault_final.category b on (a.parent_cat = b.cat_id)
where (b.cat_id is null)
and (a.parent_cat is not null)