mysql update语法 竟然不支持limit区间限制

发布时间 2023-05-16 22:24:27作者: 了悟

首先查询可以这样写,没毛病的

SELECT * from a LIMIT 1000,2000

 

1.然后看一个不是区间的limit,更新满足条件的前1000条,没问题

update a set a.imp_date = 4 where a.is_sync = 0 limit 1000

2.这样写是错误的

update a set a.imp_date = 4 where a.is_sync = 0 limit 1001,2000

原因应该是update的时候的行锁问题,跟update语句后面不能跟 SELECT同一张表的数据 是一个原因

也就是这样是不行的

UPDATE tb_name SET column_name='test' WHERE id in (SELECT id FROM tb_name ORDER BY id ASC LIMIT 20,10);

但是可以这样,这种两层子查询的话会生成临时表(在内存里多存了一份数据),所以对于mysql来说更新的不是同一张表

UPDATE tb_name SET column_name='test' WHERE id in (SELECT id FROM (SELECT * FROM tb_name ORDER BY id ASC LIMIT 20,10) AS tt);

 

上面1.的话加锁就是加前1000行

2.加锁估计很难实现,所以不支持

 

https://blog.csdn.net/qq_15071263/article/details/79001487