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

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

Patricia Arquette
发布: 2025-01-23 23:27:20
原创
213 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板