MYSQL级联条件删除数据

有时候,删除一张表的数据需要根据另外一张表数据为依据来删除表中的数据。以下就以几种方式来实现该功能。

以下语句在mysql数据库下验证:
第一种方式:
delete ufi from
 user_finger_info ufi ,user_info ui
 where ufi.userid=ui.id and ui.id=32;

第二种方式:

delete ufi from
 user_finger_info_copy ufi inner join user_info ui
on  ufi.userid=ui.id where ui.id=31;

第三种方式:
(注意这里from表不能加别名,不然会报错)
delete from
 user_finger_info_copy  where
exists (select * from user_info ui where user_finger_info_copy.userId=ui.id and ui.id=30)


第四种方式:
(注意这里from表不能加别名,不然会报错)
delete from
 user_finger_info_copy  where
userid in (select id from user_info ui where  ui.id=27)


oracle数据库不支持上述第一、第二种方式,它可以使用第三种以及第四种方式完成,并且支持表加别名。

第一种方式:

delete
from sc sc1 where exists (
select * from  student s
where sc1.id=s.id and
 s.id=1);

第二种方式:

delete
from sc sc1 where sc1.id in (
select id from  student s
where s.id=1);


第三种方式,参考http://blog.itpub.net/29378313/viewspace-1064071/

以匿名表方式:

http://blog.itpub.net/29378313/viewspace-1064071/

delete
from (select 1 from  
 student s,sc sc1
where sc1.id=s.id and s.id=1);

这里不管你是把student表放前,或者sc表放前(即谁为主表),删除的都是SC表的数据,不会删除student表的数据。具体数据库内部机制不了解。请各位解答。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值