MYSQL级联条件删除数据
2016-03-30 14:17
555 查看
有时候,删除一张表的数据需要根据另外一张表数据为依据来删除表中的数据。以下就以几种方式来实现该功能。
以下语句在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表的数据。具体数据库内部机制不了解。请各位解答。谢谢!
以下语句在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表的数据。具体数据库内部机制不了解。请各位解答。谢谢!
相关文章推荐
- Mysql主从配置,实现读写分离
- Mysql取分组中前N条记录
- C#连接MySQL数据库
- MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法
- mysql存储过程需要注意的
- mysql主从复制
- 解决mysql error:2014 Commands out of sync; you can't run this command now
- MySQL数据库主主
- Winform中打包本地Mysql数据库
- mysql函数总结
- mysql5.7.11解压版如何安装以及设置root密码
- 关于mysql解压缩版安装的问题
- 测试MySQL性能的几款工具
- 为MySQL选择合适的备份方式
- mysql创建表过程中OOM
- Wampserver 2.5 下Mysql无法开启二进制日志
- MySQL创建数据库[保存mojo格式的数据库]已经常用的utf8格式数据库
- MySQL锁行锁表
- mysql进阶学习
- MySQL 添加列,修改列,删除列