创作缘由
在做一次面试题的时候,遇到此类问题,但limit具体细节记不太清,特来强化一波,废话不多说,进入主题
limit的详细用法
1、用于强制返回指定的记录数
在查询中,经常要返回前几条或者中间某几行数据时,用到limit
语法如下:
select * from table_name limit [offset,] rows
参数解释:
offset:指定第一个返回记录行的偏移量(即从哪一行开始返回)。注意:初始行的偏移量为0.
rows:返回具体行数。
注意:当第二个参数为-1时,表示查询从当前偏移量所在的记录到最后一条记录。
总的来说,如果limit后面是一个参数,就是检索前多少行。如果是2个参数,就是从offset+1行开始,检索rows行记录。
例如:
select * from table_name limit 10;//检索前10行记录
select * from table_name limit 5 ,10;//从第6行开始,检索10行记录,即:检索记录行 6-15
2、分页
客户端通过传递start(页码),pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:
比如:
查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
查询第10条到第20条的数据的sql是:select * from table limit 10,10; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
查询第20条到第30条的数据的sql是:select * from table limit 20,10; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;
总结:
通过上面的分析,可以得出符合我们需求的分页sql格式是:select * from table limit (start-1)*pageSize,pageSize; 其中start是页码,pageSize是每页显示的条数。
以上适合数据量较小时适用,当数据量大时,采用子查询速度较快。具体参考下文:分页查询优化。
注:以上内容参考https://blog.csdn.net/qq_26599807/article/details/79240435
由于本人目前还处在菜鸟阶段,以上内容如有问题,请在评论区指出,谢谢!