mysql limit 使用不当导致的bug

时间:2022-03-03 20:33:44

//查询状态为0的数据,并翻页返回数据,每次翻页10条。

1)select * from table_a where status=0 limit 0,10;

2)select * from table_a where status=0 and id >#{lastId} order by id limit 10;


假设满足status=0的数据一共12条。分别是id=1,2,...11,12

第一条sql语句:返回id=1-10数据后。id=2的数据、status=0被改成status=1了。这时候翻页,只返回了id=12数据。(少了id=11的数据)

而第二条sql语句,由于把上次查询的最大id作为参数传进去,而且是limit 10,不会丢失id=11的数据