我想知道是否有办法创建一个带有主键的表列,该主键在不使用序列的情况下自动递增 .
我看到它在微软SQL Server上使用IDENTITY,在MySQL上使用AUTO_INCREMENT,但无法获得适用于Oracle DB的功能 .
这是我目前的做法:
CREATE TABLE test ( id NUMBER(6) IDENTITY, CONSTRAINT pk_id PRIMARY KEY (id) )
Oracle中的标识列将满足您的要求,但它们是在Oracle Database 12c中引入的 .
由于您使用的是Oracle Database 11g,因此最好的方法是使用序列触发器方法 . 蒂姆霍尔有一个很好的写这个here:
摘抄:
创建一个包含合适主键列和序列的表以支持它 . CREATE TABLE部门(ID NUMBER(10)NOT NULL,DESCRIPTION VARCHAR2(50)NOT NULL);
ALTER TABLE部门ADD(CONSTRAINT dept_pk PRIMARY KEY(ID));
创建序列dept_seq;如果未在插入中指定,则创建一个触发器以填充ID列 . 创建或替换TRIGGER dept_bir在插入部门之前对于每一行WHEN(new.id IS NULL)开始SELECT dept_seq.NEXTVALINTO:new.id来自双重;结束;
1 回答
Oracle中的标识列将满足您的要求,但它们是在Oracle Database 12c中引入的 .
由于您使用的是Oracle Database 11g,因此最好的方法是使用序列触发器方法 . 蒂姆霍尔有一个很好的写这个here:
摘抄:
ALTER TABLE部门ADD(
CONSTRAINT dept_pk PRIMARY KEY(ID));
创建序列dept_seq;
如果未在插入中指定,则创建一个触发器以填充ID列 . 创建或替换TRIGGER dept_bir
在插入部门之前
对于每一行
WHEN(new.id IS NULL)
开始
SELECT dept_seq.NEXTVAL
INTO:new.id
来自双重;
结束;