最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

Oracle自增列的实现

Oracle 宇托 604浏览 暂无评论

其实自增列的原理就是定义了一个触发器,在插入数据时,如果自增列没有设值,就从一个自增值里取值。

Oralce不像MySQL有自增列,不过我们可以通过序列(Sequence)和触发器(Trigger)来实现自增列。

下面是一个例子。

1. 再新建一个序列(Sequence)。

SQL
CREATE SEQUENCE dept_seq MAXVALUE 9999999999 NOCACHE;

2. 先新建一个表(Table)。

SQL
CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

3. 最后新建一个触发器(Trigger)。

SQL
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

到这里基本上实现了一个ID的自增列。

我们可以通过以下的SQL来测试:

SQL
INSERT INTO departments (description)
VALUES ('Development');

SELECT * FROM departments;

2015/08/31追记

现在才知道,Oralce从12c开始,就支持默认值为序列(Sequence)了,所以从Oralce12c开始,就可以不用上面的方法了。直接用下面的SQL创建表就行了。

SQL
CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.NEXTVAL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

参考地址:
AutoNumber And Identity Functionality in Oracle Databases

转载请注明:宇托的狗窝 » Oracle自增列的实现

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址