Oracle 自增ID
Oracle 自增ID
Oracle 19c新增 ID自增功能。无需通过创建序列来自增ID
SELECT * FROM V$VERSION ; -- 查看oracle版本
如下例子:ID
复制CREATE TABLE TEST (
ID NUMBER(19) GENERATED ALWAYS AS IDENTITY,
NAME VARCHAR2(255)
);
COMMENT ON TABLE TEST IS '测试表';
COMMENT ON COLUMN TEST.NAME IS 'NAME';
说明:
GENERATED ALWAYS AS IDENTITY 指定该列是自增列。每次插入数据,无需指定ID,Oracle数据库会自动分配一个唯一的自增列值。自增列从1开始,顺序递增。
例如:
INSERT INTO TEST(NAME) VALUES ('希林娜依·高')
扩展:身份列
identity column 身份列。当指定身份列,系统会隐式为其创建一个序列生成器,删除表也会顺带删除这个序列生成器。
所以身份列自动生成数值的特性还是利用序列。只是避免自己创建序列和调用序列。
语法:generated ( always | by default [ on null ] ) as identity
身份列有三种定义类型
1、generated aways as identity
总是由由系统自动生成身份列的值,如果显式给身份列赋值则报错。比如 insert into test(id, name) values(1,'希林') 则报错。
2、generated by default as identity
用户可以给身份列赋值,如果未赋值,则由系统生成身份列的值。
也就是 insert into test(id, name) values(1,'希林') 和 insert into test(name) values('希林') 都支持。(但由oracle自动生成的序列ID都是从1开始。)
但是 insert into test(id, name) values(null,'希林') 不支持
3、generated by default on null as identity
是2的扩展。如果指定了 on null选项,则身份列赋值为null时才会由系统生成值。
支持 insert into test(id, name) values(null,'希林') 。
备注:查看oracle表的生成sql,展示的其实就是序列
ID NUMBER(19) GENERATED ALWAYS AS IDENTITY 展示如下:
ID" NUMBER(19,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?