无法从mysql中的两个表中删除行

时间:2016-10-13 06:01:36

标签: mysql

我的查询是

delete ip.*,im.* 
from INPUT_MAPPING im  
left outer join INPUT_CONFIGURATION ip on(im.INPUT_ID=ip.INPUT_ID)
where ip.INPUT_ID=78

这里INPUT_CONFIGURATION是一个父表,INPUT_MAPPING是一个子表, INPUT_ID是INPUT_CONFIGURATION表的主键和INPUT_MAPPING表的外键

使用此查询我无法从INPUT_MAPPING表中删除行,也无法从具有公共INPUT_的INPUT_CONFIGURATION表中删除行 为78

执行后出现错误

  

11:19:52从INPUT_MAPPING im left outer join删除ip。,im。   INPUT_CONFIGURATION ip on(im.INPUT_ID = ip.INPUT_ID)where   ip.INPUT_ID = 78

     

错误代码:1451。无法删除或更新父行:   外键约束失败(clover_converter.INPUT_MAPPING,   CONSTRAINT INPUT_MAPPING_ibfk_1 FOREIGN KEY(INPUT_ID)参考   INPUT_CONFIGURATION(INPUT_ID))0.0033秒

2 个答案:

答案 0 :(得分:0)

如果你喜欢父母和孩子的条款,并且你觉得他们很容易被记住,你可能会喜欢将ON DELETE CASCADE翻译成留下没有孤儿!

这意味着当删除(杀死)父行时,没有孤立行应该在子表中保持活动状态。父行的所有子项也被杀死(删除)。如果这些孩子中的任何一个有孙子(在另一个表中通过另一个外键)并且定义了ON DELETE CASCADE,那么这些也应该被杀死(和所有后代一样,只要定义了级联效果。)

FOREIGN KEY约束本身也可以描述为Allow No Orphans! (首先)。如果没有Child(父表中的一行),则不允许Child(允许)在子表中使用(写入)。

为了保持一致性,ON DELETE RESTRICT可以转化为(不那么具有侵略性)你不能杀死父母!只有无子行可以被杀死(删除。)

答案 1 :(得分:0)

根据您的问题,我认为可以安全地假设您已启用了CASCADING DELETES。 在这种情况下所需要的只是

update table2 set column_id2 = 10 where column_id1 in 
    (select column_id1 from table1)