oracle 创建自增字段方法

SQL SERVER数据库可以设置自增字段,但是ORACLE数据库不能这样设置,要达到这种效果可以采用序列(sequence)的方式

1、首先建立一个包含自增字段的简单的表,如:

create table users(

    id int,

    name varchar2(20)

)

2、建立一个序列

 create sequence users_seq
 start with 1        --从1开始
 increment by 1      --每次自增1
 nomaxvalue          --不设置最大值
 nominvalue          --不设置最小值
 nocache             --不缓存
 nocycle             --不循环

说明:

(1)上面可以指定 cache的值,即把nocache 换成cache 20

指定cache的作用即把序列的一组值放入缓存中,以便快速读取。当这组值读取完后,又将自增后的下一组值放入缓存中。它的缺点是可能造成存入表的序列不连续,即跳号。这种情况可能发生在突然断电或数据库服务器down机时,这时cache中的序列就会丢失,从而跳号。可以上面建立的序列没有指定cache,而使用了nocache。

(2)nocycle的作用是不循环。如果指定cycle 1000,它的作用是,当序列从1自增到1000后,再自增就会从1重新开始,即一个循环结束,另起下一个循环。

写一条测试语句,如:

insert into users(id,name) values (users_seq.nextval,'Charles');

可得一条记录。

users_seq.nextval意思是取序列的下一个值(next value)

到此,即实现了一个自增字段。这种方法,需要在insert语句中指明id这个字段。如果像SQL SERVER那样,不需要写id字段就可以自动插入id的值呢,如:

insert into users(name) values ('Charles');

那么这就需要一个触发器:

3、建立触发器

create or replace trigger tr_users before insert on users for each row
begin
select users_seq.nextval into :new.id from dual;
end tr_user;

这个触发器的作用是,当insert users表的每一行时,取序列users_seq的下一个值nextval 存入 users表的id字段。

以上两种方式实现了insert 语句,自增字段的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值