Oracle Insert 语句插入自增ID

举报
福州司马懿 发表于 2025/09/21 23:11:58 2025/09/21
【摘要】 在 Oracle 中,没有像 MySQL 那样的 AUTO_INCREMENT 关键字来实现自增 ID,但可以通过 序列(Sequence) 和 触发器(Trigger) 或 直接在 INSERT 语句中使用序列 来实现自增 ID 的功能。以下是几种常见方法: 方法 1:使用序列(Sequence) + INSERT 语句 1. 创建序列(Sequence)CREATE SEQUENCE y...

在 Oracle 中,没有像 MySQL 那样的 AUTO_INCREMENT 关键字来实现自增 ID,但可以通过 序列(Sequence)触发器(Trigger)直接在 INSERT 语句中使用序列 来实现自增 ID 的功能。以下是几种常见方法:


方法 1:使用序列(Sequence) + INSERT 语句

1. 创建序列(Sequence)

CREATE SEQUENCE your_table_id_seq
    START WITH 1       -- 起始值
    INCREMENT BY 1     -- 每次增加 1
    NOCACHE            -- 不缓存序列值(避免并发问题)
    NOCYCLE;           -- 不循环

2. 在 INSERT 语句中使用序列

INSERT INTO your_table (id, column1, column2)
VALUES (your_table_id_seq.NEXTVAL, 'value1', 'value2');
  • your_table_id_seq.NEXTVAL 会自动获取序列的下一个值。

方法 2:使用序列 + 触发器(Trigger)自动填充 ID

如果希望在插入数据时 自动填充 ID,可以使用触发器:

1. 创建序列

CREATE SEQUENCE your_table_id_seq
    START WITH 1
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

2. 创建触发器

CREATE OR REPLACE TRIGGER your_table_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
    IF :NEW.id IS NULL THEN
        :NEW.id := your_table_id_seq.NEXTVAL;
    END IF;
END;
/
  • 这样,在插入数据时,如果 id 字段为空,触发器会自动填充序列的下一个值。

3. 插入数据(无需指定 ID)

INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');

方法 3:使用 IDENTITY 列(Oracle 12c 及以上版本)

Oracle 12c 开始,支持 IDENTITY 列(类似 MySQL 的 AUTO_INCREMENT):

CREATE TABLE your_table (
    id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
    column1 VARCHAR2(100),
    column2 VARCHAR2(100)
);
  • 插入数据时无需指定 id
INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');

总结

方法 适用版本 特点
序列 + INSERT 所有 Oracle 版本 手动在 INSERT 语句中使用 seq.NEXTVAL
序列 + 触发器 所有 Oracle 版本 自动填充 ID,无需修改 INSERT 语句
IDENTITY 列 Oracle 12c+ 最简单,类似 MySQL 的 AUTO_INCREMENT

推荐

  • 如果使用 Oracle 12c 及以上,优先使用 IDENTITY 列。
  • 如果是旧版本,使用 序列 + 触发器 最方便。

希望这能解决你的问题!🚀

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。