我想知道是否有办法创建一个带有主键的表列,该主键在不使用序列的情况下自动递增。
我看到它在微软SQL Server上使用IDENTITY,在MySQL上使用AUTO_INCREMENT,但无法获得适用于Oracle DB的功能。
这是我目前的做法:
CREATE TABLE test
( id NUMBER(6) IDENTITY,
CONSTRAINT pk_id PRIMARY KEY (id)
)
答案 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;