数据库id刚开始都是排好的,但是原因是有遗漏要insert、或不用的数据 delete 掉。这样几次以后数据库id顺序乱了。大家是怎么处理的?
例如每一个页面显示10条数据,则每翻一页本人就相应地按 id=1、11、21、31、41、51 。来读取数据库,但假如中间有数据插入、或删除,那么怎么让数据id的顺序相应的顺延和补进?
也就是说 id=2 的数据删除了,怎么让后面id=3的数据自动改为id=2,id=4的数据改为id=3。以此类推。
例如每一个页面显示10条数据,则每翻一页本人就相应地按 id=1、11、21、31、41、51 。来读取数据库,但假如中间有数据插入、或删除,那么怎么让数据id的顺序相应的顺延和补进?
也就是说 id=2 的数据删除了,怎么让后面id=3的数据自动改为id=2,id=4的数据改为id=3。以此类推。
解决方案
5
请准确理解ID(或说主键Primary Key)的含义。
主键应当是业务无关的(in most cases if not all)。它只代表了某条数据在数据库中的位置,方便查询定位以及其他表的对其的引用。
举个例子(只是例子),假设你网上商店,某个ID=1的货物不卖了,要删掉,不再显示。莫非原因是这个原因,全部数据库里面的订单,购物车等等,全部要把对应的货物ID – 1吗?!
主键应当是业务无关的(in most cases if not all)。它只代表了某条数据在数据库中的位置,方便查询定位以及其他表的对其的引用。
举个例子(只是例子),假设你网上商店,某个ID=1的货物不卖了,要删掉,不再显示。莫非原因是这个原因,全部数据库里面的订单,购物车等等,全部要把对应的货物ID – 1吗?!
5
主键应当是业务无关的(in most cases if not all)。它只代表了某条数据在数据库中的位置,方便查询定位以及其他表的对其的引用。
补充一下,连身份证号码都有可能升级。因此,假如某个数据库,有多达几百张表和客户这张表关联,并且假如客户表的主键用了身份证号码的话(也就是其他表里面也存了这个身份证做关联),当身份从15位升级到18位且有可能包含字符的情况下,这个库的全部表结构必须统统重新修改,而且,每条记录都要相应升级成新的身份证。
而假如,当时设计的时候,客户表的主键是自增/Sequence/或其他“业务无关”的类型——也就是只代表这个记录的位置而已——在身份证升级的时候,唯一要做的工作,就是把客户表的身份证字段的结构和数据调整一下,其他几百张表根本不需要任何处理。
补充一下,连身份证号码都有可能升级。因此,假如某个数据库,有多达几百张表和客户这张表关联,并且假如客户表的主键用了身份证号码的话(也就是其他表里面也存了这个身份证做关联),当身份从15位升级到18位且有可能包含字符的情况下,这个库的全部表结构必须统统重新修改,而且,每条记录都要相应升级成新的身份证。
而假如,当时设计的时候,客户表的主键是自增/Sequence/或其他“业务无关”的类型——也就是只代表这个记录的位置而已——在身份证升级的时候,唯一要做的工作,就是把客户表的身份证字段的结构和数据调整一下,其他几百张表根本不需要任何处理。
5
无法做到自动填补
分页一般用limit 来做
分页一般用limit 来做
5
你的需求,还是和ID完全无关啊。
简单的看,你只要做个逻辑删除的字段即可。然后分页查询的时候,这个逻辑删除的数据还是查询出来,只是显示的时候,另外处理即可…
简单的看,你只要做个逻辑删除的字段即可。然后分页查询的时候,这个逻辑删除的数据还是查询出来,只是显示的时候,另外处理即可…