众所周知,MySQL数据库的主键自增设置非常简单,任何一个常用的可视化工具都支持,只要打一下勾就可以开启主键自增了。然而Oracle并没有那么简单,它需要执行几个简短语句。
为了方便讲解,SQL脚本中的表用 tableName,主键为 id
sequence命名建议为表名_主键_seq,因为oracle会把所有的sequence放到同一张表里,若不好好区分,非常容易发生创建sequence冲突。
create sequence tableName_id_seq
-- 从主键从1开始
minvalue 1
-- 不设置最大值
nomaxvalue
-- 每次增加1
increment by 1
nocache;
trigger命名规范同sequence,必须要先创建sequence,再创建触发器。建议不要两个语句同时运行,多数情况语句会并发进行,trigger创建时若sequence没有先创建完成,执行结果是两条语句都成功,但实际操作时会导致主键自增失败。
create trigger tableName_id_tri
before insert on tableName for each row when (new.id is null)
begin
select tableName_id_seq.nextval into:new.id from dual;
end;
主键类型设置为自增
@TableId(type=IdType.AUTO)
select max(id) from tableName;
table_id_seq指是自己设置的sequence名称
select * from USER_SEQUENCES where SEQUENCE_NAME = 'table_id_seq';
注意:这个你不一定有权限能修改,除非你就是管理员用户
update user_sequence set last_number 200 where SEQUENCE_NAME = 'table_id_seq';
drop sequence table_id_seq;
select * from USER_SEQUENCES;
select trigger_name,table_name from all_triggers where table_name = 'tableName';
drop trigger table_id_tri