问题描述:假如现在有个学生表,表里有十条记录,现在要再添加一条记录a那么它会排在最后。
现在想要实现一个功能就是能把这条记录a插入到数据的中间,如插入到序号为3和4的记录的中间。
要实现这个功能要额外添加一个序号no字段,即使是使用的sqlite,mongodb这样本身有数据类型的id字段的数据库也需要添加一个no字段,原因有两点:
1)本身的id字段不能重复,如果把记录a添加到3和4中间,要把记录a的id改为4,原先id大于等于4的都要加1,在这个过程中想要id不重复实现起来会比较复杂
2)倘若还有个班级表,班级与学生之间为一对多关系,那么查询学生时都是根据班级来查询,即只要保证该班级下学生的相对顺序即可。如果仅用主键id字段,要往A班级里中间插入一名学生a,且插入的位置就是A班的第4名,假如原来的A班第4名id为9,现在学生a的id就要为9,而整个学生表里id>=9的都要加1,即B班的学生id也要改动(这是没有必要的),不然id就会重复,这就增加了很多时间成本。
综上所属不管有无自带的自增长整型主键id,都要添加一个Int类型序号字段no。
实现描述:
1)no字段的默认值等于它的id字段
2)要往A班级里中间插入一名学生a,且插入的位置就是A班的第4名,假如原来的A班第4名no为9,现在学生a的no改为9
3)遍历A班的所有学生,若no<9,不做处理,>=9,则no+1,这样A班的no值可能和其他班级的学生no值重复,但这没关系,只要保证A班学生的相对顺序即可,
4)查询时,根据no字段排序即可。
* 写的有点乱,主要是描述起来确实复杂不太好说。如果有人也想实现这个功能的话可以留言,后续再整理一下加上代码的实现~ 没有就算了~