我的查询是
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秒
答案 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)