我们在使用mysql,sql_server等数据库时可以在定义的字段名后面加上increment或autoincrement等标识符自动实现序列的增长。比如在mysql中
create talbe person (
P_ID int NOT NULL auto_increment,
P_NAME VARCHAR(200)
)
默认地,设置了auto_increment的字段从1开始,每次增加1
但是在oracle中设置自动增长序列稍微要麻烦一点,需要以下步骤:
1、首先创建表,还是以上面创建的表为例
2、创建一个序列,从100开始,每次增加1
create sequence PERSON_ID --PERSON_ID为这个序列的名称
minvalue 1
maxvalue 9999999999999999999999999999
start with 100 --从100开始生成序列
increment by 1 --增量为1
cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度
3、为Person表创建一个before insert的触发器,在每次插入数据前该触发器自动为ID设置上面的序列值
CREATE OR REPLACE TRIGGER "PERSON_ID_GENERATOR" BEFORE
INSERT ON "PERSON" FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
declare
mid number;
begin
select order_id.nextval into mid from dual; --order_id.nextval是获得上面定义的序列ORDER_ID的下一个值
:new.p_id:=mid; --将得到的序列值赋给表order的主键id, 可以用":new"引用将要插入的一行数据end;
4、这样下次在向person表中插入数据时,直接调用insert into PERSON(p_name) values ('张三')
不用显示在sql语句中插入P_ID,oracle会自动调用上面的触发器为P_ID赋值。