SQL之Oracle如何实现自增

一、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;–结果集如下

IDNAME
1大帅
2二帅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程大帅气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值