温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Oracle如何实现自增序列

发布时间:2026-09-07 10:34:53 来源:亿速云 阅读:102 作者:小樊 栏目:数据库

在 Oracle 数据库中,没有像 MySQL 那样的 AUTO_INCREMENT 关键字,而是通过 序列(Sequence)+ 触发器(Trigger) 或 手动调用序列 来实现自增效果。

下面按常见方式说明。


一、使用序列(Sequence)实现自增(推荐)

1️⃣ 创建序列

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

说明:

  • START WITH 1:从 1 开始
  • INCREMENT BY 1:每次加 1
  • NOCACHE:不缓存(更安全,性能略低)
  • NOCYCLE:不循环

2️⃣ 插入数据时手动使用序列

INSERT INTO users(id, name)
VALUES(seq_user_id.NEXTVAL, 'Tom');

✅ 这是 Oracle 最常用、最灵活的方式


二、使用触发器(Trigger)实现“自动自增”

如果你希望 插入时不用写序列,可以用触发器。

1️⃣ 建表

CREATE TABLE users (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50)
);

2️⃣ 创建序列

CREATE SEQUENCE seq_user_id;

3️⃣ 创建触发器

CREATE OR REPLACE TRIGGER trg_users_id
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
  SELECT seq_user_id.NEXTVAL
  INTO :NEW.id
  FROM dual;
END;

4️⃣ 插入数据(无需写 id)

INSERT INTO users(name) VALUES('Jerry');

✅ 触发器会自动给 id 赋值


三、Oracle 12c 以后的新方式(IDENTITY)

如果你使用的是 Oracle 12c 及以上版本,可以直接使用 IDENTITY:

CREATE TABLE users (
  id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  name VARCHAR2(50)
);

插入:

INSERT INTO users(name) VALUES('Alice');

✅ 类似 MySQL 的 AUTO_INCREMENT ⚠️ 底层其实也是序列


四、三种方式对比

方式 版本要求 是否自动 推荐度
序列 + 手动 所有版本 否 ⭐⭐⭐⭐
序列 + 触发器 所有版本 是 ⭐⭐⭐
IDENTITY 12c+ 是 ⭐⭐⭐⭐⭐

五、常见注意事项

  1. 序列不保证连续(事务回滚不会回退序列)
  2. 高并发场景建议合理设置 CACHE
  3. 不建议在触发器里写复杂逻辑

如果你告诉我:

  • Oracle 版本(11g / 12c / 19c)
  • 是否允许修改表结构

我可以给你最优方案示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手