一. 基本用法

       在使用查询语句的时候,经常要返回前几条或者中间某几行数据,但是你的数据库查询记录有几万、几十万时,这个时候怎么办呢?mysql 已经为我们提供了上面这样一个功能。

      使用LIMIT查询,效率非常快,且能查询出你需要的数据,再也不用全表查询导致查询数据库崩溃的情况。

      LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。

       select* from table  LIMIT [offset,] rows | rows OFFSET offset

        offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)

例如:

         select* from table LIMIT 9;     //从第1行开始,检索前 9个记录行,显示9条数据,共显示id为1....9

等价于  select* from table LIMIT 0,9;     //从第1行开始,检索前 9个记录行,显示9条数据,共显示id为1....9

        select* from table LIMIT 2,10;--检索从第3行开始,累加10条记录,共显示id为3....12

        select* from table LIMIT 6,10;--检索从第7行开始,累加10条记录,共显示id为7,8...16

        select* from table LIMIT 10,5;--检索从第10行开始,累加5条数据,共显示id为11,12...15

        select* from table LIMIT 10,-1; //查询所有记录,这种方法MySQL中已经不支持了

注意:返回所有记录就不用limit了,limit正是用来限制返回数据条数的

二. 使用LIMIT进行分页的方法

         客户端通过传递start(页码)pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:

比如:

         查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

         查询第11条到第20条的数据的sql是:select * from table limit 10,10;  ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

        通过上面的分析,可以归纳得出符合需求的分页SQL伪代码,如下所示。总之,我们只需要告诉数据库要从第几行开始拿多少条数据就行了。

mysql分页:select * from 表 limit (pageNo-1)*pageSize,pageSize; 

oracle分页:select a.* (select 表.*,rowum rn from 表) a where rn>(pageNo-1)*pageSize and rn <=pageNo*pageSize;

三. 在MyBatis中LIMIT之后的语句用法

      在MyBatis中LIMIT之后的语句不允许的变量不允许进行算数运算,会报错。

     如:     LIMIT (#{pageNo}-1)*#{pageSize},#{pageSize};  // 错误

                 LIMIT ${(pageNo-1)*pageSize},${pageSize}; (正确)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐