在 Oracle 11g 中创建类似 AUTO_INCRMENT 的列
在 Oracle 11g 以下版本中,AUTO_INCRMENT 列类型本身不可用。但是,还有其他机制可以实现类似的功能。
使用序列和触发器
Oracle 11g 中最常见的方法是使用序列和触发器的组合触发器:
表定义:
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 START WITH 1;
触发器定义:
CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END; /
此触发器为新插入的行分配一个唯一的增量值,模仿自动递增列。
IDENTITY 列(Oracle 12c )
在 Oracle 12c 及更高版本中,引入了 IDENTITY 列类型,提供了真正的自增功能:
表定义:
create table t1 ( c1 NUMBER GENERATED by default on null as IDENTITY, c2 VARCHAR2(10) );
此定义创建一个列“c1”,该列会随着插入到的每个新行而自动递增
或者,您可以指定起始值和增量值:
create table t1 ( c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), c2 VARCHAR2(10) );
使用序列作为默认值 (Oracle 12 )
另一个选项在 Oracle 12 及更高版本中,使用序列作为 a 的默认值column:
CREATE SEQUENCE dept_seq START WITH 1; CREATE TABLE departments ( ID NUMBER(10) DEFAULT dept_seq.nextval NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL ); ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID) );
这种方法使用序列分配增量值,但实际的增量操作由数据库管理。
以上是如何在Oracle 11g及更高版本中创建自动递增列?的详细内容。更多信息请关注PHP中文网其他相关文章!