SQL之Oracle如何实现自增

目录

  • 一、sequence
    • 1、创建sequence
    • 2、使用sequence
    • 3、结合触发器使用sequence

一、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 二帅

你可能感兴趣的:(数据库,Oracle)