我有三张表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'
无论如何我可以同时从这两个表中删除数据吗?没有创建两个单独的脚本?
答案 0 :(得分:1)
使用单个语句无法从许多表中删除,但更好的问题是为什么需要同时从所有表中删除?听起来好像你还没有完全理解Oracle中的事务处理方式。
让我们说你登录并删除表1中的一行,但不提交。就所有其他会话而言,该行尚未删除。如果您打开另一个连接并查询该行,它仍将存在。
然后依次从表2,3和4中删除。您仍然没有提交事务,因此数据库上的所有其他会话仍然可以看到已删除的行。
然后你提交。
同时,即使您在4个单独的语句中执行了删除操作,其他会话也将不会再看到您从4个表中删除的行。
编辑后编辑:
您可以将3个子表上的外键定义为“ON DELETE CASCADE
”。然后,当您从父表中删除时,3个子表中的所有关联行也将被删除。
答案 1 :(得分:0)
您无法从单个语句中的多个表中删除主键。