从sql中的单个脚本中的两个表中删除

时间:2016-10-12 12:56:06

标签: sql oracle

我有三张表xx_1 , xx_2, xx_3,以便:

xx_1

id   obj_version_num     location
1      x                  ubudu
2      x                  bali
3      x                  india

xx_2

id   name          grade
1    abc           band 1 
2    xyz           band 2 
3    gdgd          band 3

xx_3有:

  Name   details    col1          p_id
     abc    A         HDHD        10
     xyz    B         HDHD        20
     gdgd   C         HDHD        30  
     smith  D         HDHD        40

如果名称是xx_3中的smith,我想删除xx_1和xx_2中的数据 目前我在做:

delete from xx_1 
where id in (select distinct id from xx_2 t ,xx_3 k
where t.name=k.name
    and k.name ='Smith')

and then 
delete from xx_2 
where name ='Smith'

无论如何我可以同时从这两个表中删除数据吗?没有创建两个单独的脚本?

2 个答案:

答案 0 :(得分:1)

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

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

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

然后你提交。

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

编辑后编辑:

您可以将3个子表上的外键定义为“ON DELETE CASCADE”。然后,当您从父表中删除时,3个子表中的所有关联行也将被删除。

答案 1 :(得分:0)

您无法从单个语句中的多个表中删除主键。