#项目背景:
Java Web项目,持久层使用mybatis,没有配置主键生成策略,直接在java中生成类似uuid的36随意字符串(比uuid多了几个中横线)。
#问题 在存储过程中,需要插入数据,开始使用 sequence生成自增主键,这样与uuid的主键永远(一万年?)也不会存在冲突。最开始还特意因为开发数据的问题,让sequence从100开始生成,每次递增1。在项目快要上线的时候,从客户那里导了一些数据,用来做数据迁移脚本,在迁移脚本中,使用了旧的主键,大概看了一部分,基本都是一万以内的数字。当然就跟sequence生成的值冲突了。 #解决 最开始在写存储过程的时候,想歪了,想去给表配置主键自增,这个想法是没错的,可是字符串类型的主键怎么自增(鄙视自己),当然,这是不可靠的。 后来就用sequence了,本来是没问题的,问题出在历史数据中,应该放弃旧的主键字段,重新创建主键的。 还是自己比较傻,没想到去找oracle取uuid的方法,也就一句
select sys_guid() from dual;
比建个sequence,在取值还要方便点,直接就可以用。
注:建sequence ##建sequence
CREATE SEQUENCE seqTest INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
##取值
select sequenct_name.NEXTVAL from dual; select sequenct_name.CURRVAL from dual;
##删除sequence
drop sequence sequence_name;原文链接:https://www.f2er.com/oracle/212181.html