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

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

Patricia Arquette
Patricia Arquette原创
2025-01-23 23:27:20218浏览

How to Create Auto-Incrementing Columns in Oracle: 11g vs. 12c and Beyond?

在 Oracle 11g 及更高版本中创建自动增量列

Oracle 数据库在版本 12c 之前缺乏自动增量列的概念。尽管如此,还是可以使用序列和触发器在 Oracle 11g 中模拟此行为。

Oracle 11g 的方法

首先使用主键定义表column:

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;

接下来,创建一个触发器,为 new 生成唯一的 ID 值插入:

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;

Oracle 12c 及更高版本的更新

Oracle 12c 引入了原生 IDENTITY 列类型,提供真正的自动增量功能:

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
);

或者,您可以指定自定义起始和增量值:

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
);

或者,在 Oracle 12c 及更高版本中,使用序列作为默认值:

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 与 12c 及更高版本?的详细内容。更多信息请关注PHP中文网其他相关文章!

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