写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

使用MySQL实现分页查询

本文关键字:MySQL、分页查询、真分页、假分页、LIMIT

文章目录

  • 使用MySQL实现分页查询
    • 一、分页
      • 1. 什么是分页
      • 2. 真分页
      • 3. 假分页
      • 4. 缓存层
    • 二、MySQL实现分页
      • 1. LIMIT用法
      • 2. 分页公式

在项目开发当中,经常要实现分页功能,在面试时也会经常被问到:什么是分页。这是因为在一个页面上能够显示的数据是有限的,而存放在数据库中的数据往往很多,我们必须将这些数据安放到不同的页面中去。

一、分页

1. 什么是分页

一般在客户端实现分页功能的时候,要显示当前页的数据、当前所在页数、临近页面的按钮以及总页数等等。这些数据随着翻页的进行能够动态的变化,为了实现这样的效果,一般会采取两种办法:真分页假分页。这样的划分方式是从与数据库的交互方式出发的,是每次翻页时都进行查询还是一次性查出所有的数据。

2. 真分页

真分页指的是每次在进行翻页时都只查询出当前页面的数据,特点就是与数据库的交互次数较多,但是每次查询的数据量较少,数据也不需要一直保存在内存中。适用于数据量比较大的场景,数据不适合全量查出的情况。

3. 假分页

假分页指的是对于要显示的数据一次性全部查出,一直存在在服务端或客户端,在前端进行分页或由服务端控制分页。将根据当前所在页来计算应该显示的数据所在下标,用循环取出目标数据。只有当会话断开或页面关闭,相应的资源才会被释放。

4. 缓存层

真分页和假分页都要和数据库进行交互,对于真分页来说不需要担心数据同步的问题,因为每次都是查询出最新的,但是数据库的负担会很重,尤其是用户量大的情况下。
假分页可以在一定程度上减轻数据库的压力,但是数据不能及时得到同步,除非重新请求或页面刷新。
一般在企业中会有缓存层的存在,既能有效降低数据库的压力,又能及时的进行数据同步。在对数据库中的数据进行修改后,要将变更后的数据及时同步到缓存层,在进行数据查询时从缓存层获取。

二、MySQL实现分页

本文将介绍如何通过真分页的方式,每次取出所需数据。对于不同的数据,实现分页有不同的方式,在MySQL中可以使用LIMIT来限制查询出的数据。

1. LIMIT用法

LIMIT出现在查询语句的最后,可以使用一个参数或两个参数来限制取出的数据。其中第一个参数代表偏移量:offset(可选参数),第二个参数代表取出的数据条数:rows。

  • 单参数用法

当指定一个参数时,默认省略了偏移量,即偏移量为0,从第一行数据开始取,一共取rows条。

/* 查询前5条数据 */
SELECT * FROM Student LIMIT 5;
  • 双参数用法

当指定两个参数时,需要注意偏移量的取值是从0开始的,此时可以有两种写法:

/* 查询第1-10条数据 */
SELECT * FROM Student LIMIT 0,10;
/* 查询第11-20条数据 */
SELECT * FROM Student LIMIT 10 OFFSET 10;

2. 分页公式

  • 总页数计算

在进行分页之前,我们需要先根据数据总量来得出总页数,这需要用到COUNT函数和向上取整函数CEIL,SQL如下:

/* 获得数据总条数 */
SELECT COUNT(*) FROM Student;
/* 假设每页显示10条,则直接进行除法运算,然后向上取整 */
SELECT CEIL(COUNT(*) / 10) AS pageTotal FROM Student;
  • 核心信息

    • 当前页:pageNumber
    • 每页数据量:pageSize

在实际操作中,我们能够得到的信息有当前所在页以及每页的数据量,同时要注意一下是否超出了最大页数。以每页10条为例,则前三页的数据应为:

  • 第1页:第1~10条,SQL写法:LIMIT 0,10
  • 第2页:第11~20条,SQL写法:LIMIT 10,10
  • 第3页:第21~30条,SQL写法:LIMIT 20,10

据此我们可以总结出,LIMIT所需要的两个参数计算公式如下:

  • offset:(pageNumber - 1) * pageSize
  • rows:pageSize

扫描下方二维码,加入官方粉丝微信群,可以与我直接交流,还有更多福利哦~

使用MySQL实现分页查询相关推荐

  1. Mysql中分页查询两个方法比较

    mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1; SELECT a FROM f ...

  2. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询

    /**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...

  3. Mysql数据库分页查询及优化

    最近遇到个数据库分页查询问题,mysql数据库分页查询默认是升序查询,就是第一页查询的是最先插入的数据,最后一页才是最新插入的数据,弄了个小的数据库表单,记录下我的操作过程,还有优化查询速度的方法. ...

  4. MySQL 数据库 分页查询/聚合查询

    引言 在本篇博客简单介绍一下分页查询以及聚合查询简单操作. 分页查询 在MySQL中,分页查询一般都是使用limit子句实现,limit子句声明如下: SELECT * FROM table LIMI ...

  5. jpa mysql sql分页查询语句_JPA多条件复杂SQL动态分页查询功能

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  6. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了 ...

  7. [转]MySQL实现分页查询

    原文地址:https://blog.csdn.net/starleejay/article/details/78802610 limit 基本实现方式 一般情况下,客户端通过传递 pageNo(页码) ...

  8. mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术

    由于通过ResultSet的光标实现数据分页存在占用大量资源等性能方便的缺陷,所以,在实际开发中,通过采用数据库的分页机制来实现分页查询功能更为上上之策. 下面我就通过MySQL数据库提供的分页机制来 ...

  9. Java web访问MySql数据库分页查询

    有时候我们查询数据库表时,但是很多时候表中的记录很多,需要显示出来的话怎么办?这时可以使用分页的方法,就是指定从数据库表的什么位置开始查询显示,以及指定显示的记录数目. Mysql数据库提供了limi ...

最新文章

  1. 第九课 特殊权限set_uid、stick_bit,软链接,硬链接
  2. ie 报错 vuex requires a Promise polyfill in this browser
  3. mysql常见的sql语法示例
  4. code换取微信openid_关于PHP如何获取微信的openID教程
  5. ZDOO全协同管理系统 v6.9
  6. 对编码通俗易懂的介绍
  7. 文件系统的简单的操作
  8. 谷歌跟风推微信小程序;中兴解禁后首获订单;Yahoo Messenger正式关闭 | 极客头条...
  9. 【LOJ2127】「HAOI2015」按位或
  10. 新一代RPC框架-GRPC
  11. Jmeter测试——java测试脚本编写
  12. ENVI的下载和安装
  13. 弱电工程项目经理部及各相关人员岗位职责
  14. 【金蝶K3】新/老单据转换流程相关表说明(单据转换流程下推老单,钩稽关系可为严格控制)
  15. 智能远程监督系统解决方案
  16. 【算法leetcode每日一练】1436. 旅行终点站
  17. python中找不到模块_安装完Python包然后找不到模块的解决步骤
  18. vs code git 编辑器中拉取(pull) 的时候报错 [rejected] v1.0.0 -> v1.0.0 (would clobber existing tag)
  19. Activiti 会签/或签 设计思路
  20. oracle 抽样_[转载]利用ORACLE实现数据抽样

热门文章

  1. 一文详解XMind的安装教程
  2. Matlab cellfun函数
  3. 戴尔G3 3590安装ubuntu16.04
  4. Android实现从左往右TextView淡入淡出渐变效果
  5. 高校如何搭建虚拟实验室?如何通过数据手套模拟实验教学?
  6. jQ【精】插件网址收集
  7. php 苹果支付验证失败的原因,iOS 微信支付报错 支付验证签名失败
  8. STM32外设系列—L298N
  9. Java 可变参数传递
  10. 精选开源电商系统,开箱即用