最近用低代码平台amis, 2天搭了一个审核系统,为了快点看到效果,没有使用框架的ORM,直接写SQL,结果分页展示数据,总数比展示数据多一条,原因是在MySQL Limit上翻车了。特别震惊,工作这么多年了,自己真的不知道limit的用法。
一、带着问题去思考
下面两条SQL, 加limit后数据少一条,一脸懵逼了好久。简单的问题看出了自己的无知。
mysql> select id from img_pic_approve where status = 3 limit 1, 10; +------+ | id | +------+ | 5743 | | 5746 | | 5748 | | 5738 | | 5735 | | 5736 | +------+ 6 rows in set (0.00 sec) mysql> select id from img_pic_approve where status = 3; +------+ | id | +------+ | 5742 | | 5743 | | 5746 | | 5748 | | 5738 | | 5735 | | 5736 | +------+ 7 rows in set (0.00 sec)
二、Limit用法
1、功能
Limit子句可以被用于强制select语句返回指定的记录数。返回前几条或中间某几条数据。
2、语法格式
offset为偏移量【初始记录行的偏移量是0,注意不是1】,rows为返回的记录数
# 用法一 SELECT * FROM table_name LIMIT [offset,] rows; #用法二 SELECT * FROM table_name LIMIT rows OFFSET offset;
3、一般习惯用方式一
# 查前5条记录 select * from table_name limit 5; # 等价于 select * from table_name limit 0, 5;
4、Web应用中的分页功能
select * from table_name limit (paeg - 1) * pagesize, pagesize;
参考:
MYSQL LIMIT 用法【菜鸟网络,比较基础】
MySQL的limit用法和分页查询的性能分析及优化【思否-比较系统】
廖雪峰分页查询【可以在线测试验证】