Oracle DB - 无序列的主键自动增量列

时间:2016-02-03 19:34:53

标签: mysql oracle oracle11g

我想知道是否有办法创建一个带有主键的表列,该主键在不使用序列的情况下自动递增。

我看到它在微软SQL Server上使用IDENTITY,在MySQL上使用AUTO_INCREMENT,但无法获得适用于Oracle DB的功能。

这是我目前的做法:

CREATE TABLE test
(   id NUMBER(6) IDENTITY,
    CONSTRAINT pk_id PRIMARY KEY (id)
)

1 个答案:

答案 0 :(得分:1)

Oracle中的标识列将满足您的要求,但它们是在Oracle Database 12c中引入的。

由于您使用的是Oracle Database 11g,因此最好的方法是使用序列+触发器方法。 Tim Hall对此here

进行了很好的描述

摘录:

  

创建一个包含合适主键列和序列的表   支持它。

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

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

CREATE SEQUENCE dept_seq;
     

如果未在中指定,则创建一个触发器以填充ID列   插入。

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;