SQL SERVER数据库可以设置自增字段,但是ORACLE数据库不能这样设置,要达到这种效果可以采用序列(sequence)的方式
1、首先建立一个包含自增字段的简单的表,如:
create table users(
)
2、建立一个序列
说明:
(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 语句,自增字段的效果。