首页 > 数据库 >SqlServer数据库分页查询问题排查

SqlServer数据库分页查询问题排查

时间:2023-10-03 10:45:13浏览次数:48  
标签:10 uname 数据库 SqlServer 排查 birthday user insert tb

使用 docker 安装

下载镜像

docker search mssql-server
docker pull datagrip/mssql-server-linux

创建容器

docker run -d --name sqlserver -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=szz123456' datagrip/mssql-server-linux

ACCEPT_EULA 需要设置为Y以接受SQL Server的许可协议,而 SA_PASSWORD 是用于SA管理员账户的密码。客户端连接时使用 sa/szz123456。

数据准备

创建表及插入数据

drop TABLE tb_user;

create table tb_user(
  uid int identity(1,1) PRIMARY key,
  uname varchar(20),
  birthday datetime 
);


SELECT * FROM tb_user;

delete from tb_user;

insert into tb_user(uname,birthday) values('lisi1','2023-10-02 18:10:10');
insert into tb_user(uname,birthday) values('lisi2','2023-10-02 18:10:10');
insert into tb_user(uname,birthday) values('lisi3','2023-10-02 18:10:20');
insert into tb_user(uname,birthday) values('lisi4','2023-10-02 18:10:20');
insert into tb_user(uname,birthday) values('lisi5','2023-10-02 18:10:30');
insert into tb_user(uname,birthday) values('lisi6','2023-10-02 18:10:30');
insert into tb_user(uname,birthday) values('lisi7','2023-10-02 18:10:40');
insert into tb_user(uname,birthday) values('lisi8','2023-10-02 18:10:40');
insert into tb_user(uname,birthday) values('lisi9','2023-10-02 18:10:50');
insert into tb_user(uname,birthday) values('lisi10','2023-10-02 18:10:50');

问题复现

分页查询

select * from tb_user order by birthday desc offset 5 row fetch next 1 row only;

根据日期排序,日期存在一致的数据(如购物车订单,创建时间都一样),正好分页的数据是购物车订单的一部分,分页查询出的数据出错,每次返回的数据可能不一致,对于上面的查询, 既可能是 lisi5 也可能是 lisi6。不过现在又复现不出来了。

简单解决方法:对于购物车订单,日期增加几十毫秒

参考

docker 安装sqlserver
Sqlserver 数据库分页查询(三种方式)

标签:10,uname,数据库,SqlServer,排查,birthday,user,insert,tb
From: https://www.cnblogs.com/strongmore/p/17383755.html

相关文章