百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql批量删除数据sql语句详解
分享文章到:

mysql批量删除数据sql语句详解

发布时间:01/15 来源: 浏览: 关键词:
mysql批量删除数据可以使用很多技巧来实现,我相信很多朋友知道的不是很多,这里我们来给大家介绍一下常用的批量删除记录的sql语法吧,希望例子能给大家带来帮助哦。

1.like与 in批量删除指定记录

like语法

like主要是用来模糊查询了

sql = "delete from A where field like '%ABC%'" 这个可用于字符与数字

in 语法

sql = "delete from A where field id(1,2,3)"  这个只能用在数字

关联删除

delete B from B
where exists (select 1 from A where B.accountid=A.accountid);

上面两条方法如果删除100W级别的数据库估计是没什么问题,如果是1000W估计就不行了

假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1

会发现删除失败,因为lock wait timeout exceed的错误。
 
因为这条语句所涉及的记录数太多,因此我们通过LIMIT参数分批删除,比如每10000条进行一次删除,那么我们可以利用 MySQL这样的语句来完成
 

 代码如下
DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;

然后分多次执行就可以把这些记录成功删除。

另一种 删除方向。

上面通过比较觉的需要删除的量不是太大时,把需要删除的PID生到到另一个临时表中。

 代码如下

mysql DBname -e "select a.pid from table1 a ,table2 b where a.pid=b.pid">del_pid.txt;

sed -i '1d' del_pid.txt
awk '{print "delete from table1 where pid=",$1,";"}' del_pid.txt >del_pid.sql
mysql DBname<del_pid.sql

这样把SQL拆成多个SQL执行速度应该不会太慢了。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有5人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板