一、sequence
在Oracle中sequence就是一个自增序列,每次取它时进行自增,类似于Mysql的自增主键。sequence与表没有关系。可以使用sequence在oracle中实现自增。
1、创建sequence
create sequence SEQ_ID
minvalue 1 --序列最小值
maxvalue 100000000 -- 序列最大值,设置为nomaxvalue时无最大值。
start with 10 -- 序列从10开始自增
increment by 1 -- 每次自增数量
nocache --nocache不进行缓存,cache [X] 设置缓存 X 个序列,开启缓存效率会变高,但如果宕机,缓存丢失,会出现序列不连续的情况(跳号)
cycle; -- 循环,序列达到最大值时,从1开始重新自增
2、使用sequence
select SEQ_ID.nextval from dual;--获取下一个值。
select SEQ_ID.currval from dual;--获取当前值
可以在正常的sql语句中使用sequence
insert into users(id,name) values(SEQ_ID.nextval,'大帅'); update users set id = SEQ_ID.nextval where name='大帅';
注:第一次nextvale返回的是初始值,随后的每次nextval会增加定义的increment by x中x的值。
cache:oracle可以预先在内存中设置一些sequence,保证存取的速度。当内存中的sequence取完后,oracle会再取一组放到内存中。如果数据库宕机,cache中的sequence就会丢失,造成sequence不连续的情况。
3、结合触发器使用sequence
触发器:它能够根据对表的操作时间,触发一些动作,这些动作可以是insert、update、delete等修改操作。可以再增删改前后进行一些操作。
create or replace trigger
before insert on users
for each row
begin
select REQ_ID.nextval into :new.id from dual;
end;
对user进行insert,不指定id,可以实现mysql的中的自增
insert into users(name) values('大帅');
insert into users(name) values('二帅');
select * from users;–结果集如下
ID | NAME |
---|---|
1 | 大帅 |
2 | 二帅 |