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

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

Linda Hamilton
发布: 2025-01-23 23:31:20
原创
241 人浏览过

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

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