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
MySQL
Oracle
点赞
收藏
关注作者