导航

Oracle自增列

Posted on 2013-08-28 14:03  寒宵飞飞  阅读(802)  评论(0编辑  收藏  举报

一、介绍: 

在设计数据库时,有时候希望表的某一列为自增列,例如编号,本文就介绍如何在oracle数据库中实现自增列,需要两个步骤:

1)构建序列(sequence)

      在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

2)构建触发器(trigger)

    构建完序列后,就需要构建一个触发器,当往某一个表中插入数据时,触发器会从序列中取出一个序列号,插入到该表的自增列中

 

二、示例:

1、在oracle中创建一个表:USER

create table USER
(
  ID   NUMBER(8),
  NAME VARCHAR2(32),
  AGE  NUMBER(3)
)
;

2、创建一个sequence:seq_user_id

create sequence seq_user_id
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;

3、创建一个tirgger:trg_user_id

CREATE OR REPLACE TRIGGER trg_user_id
BEFORE INSERT ON USER
FOR EACH ROW
BEGIN
SELECT seq_user_id.nextval INTO :new.id FROM dual;
END;

4、测试自增列,插入一条数据

insert into user (name,age) values ('zhang',25);

就可以看到数据库中新增了一条记录,

id name age
1 zhang 25

 

 

   

三、备注:

按照上面的步骤,就可以实现oracle数据库的自增列。某些情况下,我们希望数据库的自增列为字符串形式,例如user表的id为varchar2类型,此时如何实现自增列

create table USER
(
  ID   VARCHAR2(8),
  NAME VARCHAR2(32),
  AGE  NUMBER(3)
)
;

答案也很简单,只需要修改tirgger:trg_user_id如下:

CREATE OR REPLACE TRIGGER trg_user_id
BEFORE INSERT ON USER
FOR EACH ROW
BEGIN
SELECT TO_CHAR(seq_user_id.nextval) INTO :new.id FROM dual;
END;