由于oracle的表没有mysql自增的功能,需要对表进行一些额外的操作才能达到目的,具体操作如下
说明:过程操作所用连接工具为navicat
通过语句增加触发器
一、存在一个表名字如下,需要给UA_ID在插入数据时候生成自增id
创建一个sequence 命名为T_USERADDRESS_UA_ID,初始值设置为1,最大值99999999999999999999,步进为1,具体语句如下
create sequence T_USERADDRESS_UA_ID
minvalue 1
maxvalue 99999999999999999999
start with 1
increment by 1
cache 20;
执行结果
二,创建TRI
插入我们需要自增的表T_USER_ADDRESS,关联刚刚上面创建的sequence T_USERADDRESS_UA_ID的下一个新值为UA_ID的默认值
CREATE OR REPLACE TRIGGER T_USERADDRESS_UA_TRI
BEFORE INSERT ON T_USER_ADDRESS
FOR EACH ROW
BEGIN
SELECT T_USERADDRESS_UA_ID.NEXTVAL INTO :NEW.UA_ID FROM DUAL;
END;
执行
通过navicat查看
触发器语句可以这里查看
三、验证结果
插入一条数据看看,其中ua_id设置值为1
insert into T_USER_ADDRESS (UA_ID,UR_ID,UA_NAME,UA_PHONE,UA_CERT_TYPE,UA_CERT_NO,UA_PROVINCE,UA_CITY,UA_COUTY,UA_ADDRESS,UR_CREATE_DATE) values ('1' ,'6' ,'name123' ,'15588777777' ,'1' ,'1234567890' ,'guangdong' ,'shenzhen' ,'baoan' ,'xinanyilu' ,to_date('2021-04-15 20:47:21', 'yyyy-mm-dd hh24:mi:ss') );
结果
注意:上图查询新插入的结果ua_id自增了1,也就是2了,这是不对的
因为开始创建一个sequence,后面又创建TRI,sequence执行步进后会得到一个新值,tri再获取下一个值,会出现2-4-6这样的递进自增ID
所以
取消结果是这样的
尝试插入两行连续的行,看是否出现连续的自增ID
96和97连续
至此,oracle自增id和自增出现不按照步进连续的问题解决