首页 >数据库 >mysql教程 >如何在Oracle 11g及更高版本中创建自动递增列?

如何在Oracle 11g及更高版本中创建自动递增列?

Linda Hamilton
Linda Hamilton原创
2025-01-23 23:31:20308浏览

How to Create Auto-Incrementing Columns in Oracle 11g and Later?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn