考虑到表频繁地插入和删除记录的情况,用序列(SEQUENCE)创建的主键值可以重复利用么?如果不能重复利用,序列岂不是很快就不够用了啊,应该可以重复利用吧,系统怎么处理这样情况的? SqlServer 的 IDENTITY 产生的序号也是可以重复利用的吧?
------解决方案--------------------
不能重复利用,会一直增长到最大值,如果创建时候指定了cycle参数,继续从最小值开始增长。
------解决方案--------------------
-- 可以,只要加个 cycle 关键字表示当序列值达到最大值后,轮循到从最小值开始。
-- 例如:
14:27:28 HR@myora > create sequence t_seq start with 1 increment by 1 maxvalue 10 nocache cycle;
序列已创建。
14:27:32 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
1
已选择 1 行。
14:27:38 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
2
已选择 1 行。
14:27:39 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
3
已选择 1 行。
14:27:39 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
4
已选择 1 行。
14:27:40 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
5
已选择 1 行。
14:27:41 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
6
已选择 1 行。
14:27:41 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
7
已选择 1 行。
14:27:42 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
8
已选择 1 行。
14:27:42 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
9
已选择 1 行。
14:27:43 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
10
已选择 1 行。
14:27:43 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
1
已选择 1 行。
14:27:44 HR@myora > select t_seq.nextval from dual;
NEXTVAL
----------
2
已选择 1 行。
------解决方案--------------------
每张表都会有各自的生命周期,也会做数据迁移和数据清理。
也可以使用联合主键,ID+时间戳也可以保证数据唯一性,这样就可以循环使用序列了。
当然,设计还是得以实际业务为准
------解决方案--------------------