首页 > 数据库 > mysql教程 > 如何为现有Oracle表列添加自动递增功能?

如何为现有Oracle表列添加自动递增功能?

DDD
发布: 2024-12-19 02:52:09
原创
961 人浏览过

How to Add Auto-Incrementing Functionality to Existing Oracle Table Columns?

现有Oracle表列的自增

在Oracle中,可以实现对已有主键的列添加自增功能根据 Oracle 版本,有不同的方式。

Oracle 11g 和之前

创建一个将递增列值的序列:

CREATE SEQUENCE t_seq
START WITH 150111111
INCREMENT BY 1;
登录后复制

在插入期间使用触发器将下一个序列值分配给列:

CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT ON t
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
    SELECT t_seq.NEXTVAL
    INTO   :new.id
    FROM   dual;
END;
登录后复制

Oracle 12c 及更高版本

Oracle 12c 引入了 Identity 列,它允许自动递增值,而不需要序列或触发器:

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
登录后复制
登录后复制

列就位后,新行将从指定的起始值开始自动递增。

使用 Oracle 11g 的示例

给定表:

TABLE t (
 SEQ_ID NUMBER(10) NOT NULL
);
登录后复制

创建序列“t_seq”和触发器“t_trg”后,插入新行:

INSERT INTO t(text) VALUES('auto-increment test 1');
INSERT INTO t(text) VALUES('auto-increment test 2');
登录后复制

查询表以验证自增:

SELECT * FROM t;
登录后复制
登录后复制

使用 Oracle 的示例12c

表定义为:

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
登录后复制
登录后复制

插入新行:

INSERT INTO t(text) VALUES('This table has an identity column');
登录后复制

查询表进行确认:

SELECT * FROM t;
登录后复制
登录后复制

在两个 Oracle 版本中,列“ID”现在将从指定的起始位置开始自动递增值 (150111111),步长为 1。

以上是如何为现有Oracle表列添加自动递增功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

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