同时从多个表中删除记录?

时间:2011-08-16 10:09:09

标签: sql oracle

我有4张桌子。在第一个表中有appid作为主键,而在其他三个表中有其外键。我想在一个查询中删除所有三个数据。我尽我所能但失败了。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:10)

您不能编写引用多个表的delete语句,您需要编写4个delete语句。

但是,如果合适,您可以将3个子表上的外键定义为“ON DELETE CASCADE”。然后,当您从父表中删除时,3个子表中的所有关联行也将被删除。这有时很有用,但我不建议将其作为一般做法,因为它对开发人员来说可能是危险和混乱的。

答案 1 :(得分:3)

使用单个语句无法从许多表中删除,但更好的问题是为什么需要同时从所有表中删除?听起来好像你还没有完全理解Oracle中的事务处理方式。

让我们说你登录并删除表1中的一行,但不提交。就所有其他会话而言,该行尚未删除。如果您打开另一个连接并查询该行,它仍将存在。

然后依次从表2,3和4中删除。您仍然没有提交事务,因此数据库上的所有其他会话仍然可以看到已删除的行。

然后你提交。

同时,即使您在4个单独的语句中执行了删除操作,其他会话也将不会再看到您从4个表中删除的行。

答案 2 :(得分:-2)

如果数据库是Mysql,则可以在DELETE语句中使用join。 有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/delete.html