Oracle Insert 语句插入自增ID
【摘要】 在 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)