不借助limit子句实现分页

Author Avatar
Akun 10月 13,2021

如何实现分页?

大部分情况下,只需要简单的应用sql中封装的语法limit子句即可。

然而,事无完事,人无完人,部分sql不支持limit子句(例如python中的sqlite)。

此时如果我们有分页的需求,我们应该怎么做呢?

不借助limit函数实现分页

此时我们可以想到一种情况。

在有自增列的情况下,我们可以通过where子句实现分页。

测试

  1. 配置环境
    一个简单的user表,其中id字段为自增

  2. 通过limit子句查询第10-20的数据
    查询语句
    SELECT * FROM test.user ORDER BY id LIMIT 10,10
    结果

  3. 通过where子句实现分页查询
    查询语句
    SELECT * FROM test.user WHERE id BETWEEN 10 AND 20
    结果

综上

非常完美,大体功能基本复现,基本解决部分数据库无法使用limit分页的缺点。

但也有部分不足——大部分表并不需要自增字段。

优化方法

在表中增加一行自增字段,虽然整体影响了表的结构,但是具体实现来说可以避免操作上的失误(用人话来说就是,给你嗦嗦咋样写sql没bug)。

  1. 查询时,避免用*号替代字段的名称
    select name, sex from user where id between 10 and 20
  2. 插入时,标明具体的字段名称,而不是使用默认
    insert into user(name, sex) values("xxx","xxx")
  3. 在别的操作中避免出现自增字段的名称,从而避免污染数据...