MySQL数据库使用limit关键字来Update来解决事务过大的问题

最近发生产执行SQL的时候,更新一张几十万的大表出现了如下所示错误,
在这里插入图片描述
大致意思就是在执行这个事务的时候由于内存不足导致更新失败,这是可以有两种办法,一是可以把内存调大,但是生产的参数随意改动风险大,第二种方法是分次进行一个更新,这就也可以解决问题。

1.使用update 和limit 以及order by语句

  • 先统计这张表的大致数量
select count(*) from student;
  • 拿到记录数后大致可以试一下找到一个切分的值
  • 先更新第一部分,假设更新一万条
UPDATE student SET name= '张三'  order by id limit 10000,
  • 当想再次更新10001到20000条的时候报错了,此时可以直接使用子查询进行更新
UPDATE student SET name = '张三' where id in (
select id from (select id from  student order by id limit 10001,20000) as temp );
  • 注意更新最好更加某个字段进行排序可以确保语句的正确性
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值