问:oracle是主键如何自增
答:Oracle不同于其他数据库(如mysql),天生带有自增。需要通过 序列+触发器 或者 特殊序列的方式的形式实现序号的自增。
1.特殊序列
创建序列:T_SYS_USER_SEQ 为序列的名,序列从1开始。
CREATE SEQUENCE T_SYS_USER_SEQ
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1 NOCACHE
插入SQL:插入语句需要在id字段的位置使用 序列名.NEXTVAL的方式
insert into sys_users(user_id,user_name,user_pwd,sex)
values(T_SYS_USER_SEQ.NEXTVAL,'shaoduo','shao111','男') ;
commit ;
那么问题来了:如果使用mybatis之类的,又必须要插入ID,可是Mapper什么的都写好了,如果你要手动改,估计就是灾难了。幸好还有第二种方法
2. 序列+触发器
创建序列
---自增序列
CREATE SEQUENCE T_SYS_USER_SEQ
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1 NOCACHE ;
创建触发器
--创建触发器
create or replace trigger T_SYS_USER_USER_ID_TRIGGER
before insert on SYS_USERS
for each row
begin
select T_SYS_USER_SEQ.nextval into :new.user_id from dual;
end T_SYS_USER_USER_ID_TRIGGER;
其中:
T_SYS_USER_USER_ID_TRIGGER 是设置的触发器名字
SYS_USERS是表名
T_SYS_USER_SEQ 是序列名
new.user_id 是 new.主键
insert语句:无需插入id
insert into sys_users(user_name,user_pwd,sex)
values('shaoduo','shao111','男') ;
commit ;