试图弄清楚如何删除SQL表中有多个外键指向它的行,以及指向那些等的更多键等等。级联删除没有打开(我无法控制转向他们在,)我试图避免在受这一次删除影响的每一行上执行删除。
因此,如果我有表格XXX,列YYY和ZZZ,其中YYY是主键,而ZZZ是一个指向它的多个外键的列,我将如何根据主键值删除行?
语法将是: 从XXX删除 在哪里YYY = some_value
这是否可能(没有进行大量的个别删除)?如果是这样,我该怎么做?
答案 0 :(得分:2)
没有
你需要外键约束才能级联删除(这是我不太喜欢的东西,它让一些应用程序/开发人员认为他们可以删除并重新插入一些数据而不是更新它放置而不会无意中导致删除所有子行)或者在删除父行之前必须删除子行。
通常,如果要从子表中删除数据,则只需手动编写各种DELETE
语句就更容易了。可以查询数据字典(dba_constraints
,dba_cons_columns
等)和动态SQL以遍历所有约束并生成相应的DELETE
语句。在绝大多数情况下,除非您尝试为大量表生成delete
语句,否则这样做是没有意义的。
答案 1 :(得分:0)
如何关闭外键约束检查?
SET FOREIGN_KEY_CHECKS = 0;
然后在删除行时将其打开?
SET FOREIGN_KEY_CHECKS = 1;