Oracle中不存在mysql那种主键自增的设计
1. 序列+selectKey标签
- Oracle新建序列
CREATE SEQUENCE [序列名称]
INCREMENT BY 1 /**每次自增1, 也可写非0的任何整数*/
START WITH 1 /**以该值开始自增或自减*/
MAXVALUE 99999 /**最大值;设置NOMAXVALUE表示无最大*/
MINVALUE 1 /**最小值;设置NOMINVALUE表示无最大值*/
CYCLE or NOCYCLE /**设置到最大值后是否循环*/
CACHE 20 /**指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE*/
ORDER or NOORDER /**设置是否按照请求的顺序产生序列*/
- 在mybatis中使用<selectKey标签
<insert id="addLoginLog" parameterType="map" >
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select attachment_info_seq.nextval from dual
</selectKey>
insert into ..... values(#{id},....)
</insert>
2. 序列+触发器
- Oracle新建序列
CREATE SEQUENCE [序列名称]
INCREMENT BY 1 /**每次自增1, 也可写非0的任何整数*/
START WITH 1 /**以该值开始自增或自减*/
MAXVALUE 99999 /**最大值;设置NOMAXVALUE表示无最大*/
MINVALUE 1 /**最小值;设置NOMINVALUE表示无最大值*/
CYCLE or NOCYCLE /**设置到最大值后是否循环*/
CACHE 20 /**指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE*/
ORDER or NOORDER /**设置是否按照请求的顺序产生序列*/
- Oracle创建触发器
create or replace trigger [触发器名]
before insert on [表名] /*当表进行插入操作时触发此触发器*/
for each row /*对每一行都检测是否触发*/
begin /*触发器开始*/
select [序列名称].nextval into :new.[表中要自增的字段名] from dual;
end;