Oracle的id自增长的两种方式

本文详细介绍了如何使用SQL序列产生主键值,并通过自定义序列和触发器实现自动为主键列赋值的过程。通过实例演示了创建序列、建表、插入数据及使用序列的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式一:

利用序列产生主键值。 

序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。

 

--创建sequence 
create sequence seq_on_test 
increment by 1 
start with 1 
nomaxvalue 
nocycle 
nocache; 

--建表 
drop table test; 
create table test( 
ID integer 
,stu_name nvarchar2(4) 
,stu_age number 
); 

--插入数据 
insert into test values(seq_on_test.nextval,'Mary',15); 
insert into test values(seq_on_test.nextval,'Tom',16); 

select * from test; 

--结果 
/* 
1 Mary 15 
2 Tom 16 
*/ 

--seq的两个方法 
select seq_on_test.currval from dual; 
select seq_on_test.nextval from dual; 

--结果 
/* 
2 
3 
*/ 

 

方式二: 

自定义一个序列(sequence),然后创建触发器;

例:

首先,创建一张表:

CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25));

 

然后,自定义一个序列(sequence):

CREATE SEQUENCE example_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区

 

再创建一个触发器:

CREATE TRIGGER example_triger BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)--只有在id为空时,启动该触发器生成id号
begin
select example_sequence.nextval into: new.id from dual;
end;

 

 测试插入数据:

insert into example(name) values('张三');
insert into example(id, name) values(111,'李四');

 

查询表的结果是:

idname
1张三
111李四

 

 

http://www.jb51.net/article/50415.htm

http://www.cnblogs.com/dlts26/archive/2012/05/22/2513563.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值