在 Oracle 数据库中,没有像 MySQL 那样的 AUTO_INCREMENT 关键字,而是通过 序列(Sequence)+ 触发器(Trigger) 或 手动调用序列 来实现自增效果。
下面按常见方式说明。
CREATE SEQUENCE seq_user_id
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
说明:
START WITH 1:从 1 开始INCREMENT BY 1:每次加 1NOCACHE:不缓存(更安全,性能略低)NOCYCLE:不循环INSERT INTO users(id, name)
VALUES(seq_user_id.NEXTVAL, 'Tom');
✅ 这是 Oracle 最常用、最灵活的方式
如果你希望 插入时不用写序列,可以用触发器。
CREATE TABLE users (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
CREATE SEQUENCE seq_user_id;
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;
INSERT INTO users(name) VALUES('Jerry');
✅ 触发器会自动给 id 赋值
如果你使用的是 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+ | 是 | ⭐⭐⭐⭐⭐ |
CACHE如果你告诉我:
我可以给你最优方案示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。