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,

posted @   五字妹妹实在是棒  阅读(370)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
欢迎wuzimeimei来到《Oracle 自增ID - 五字妹妹实在是棒 - 博客园》
返回顶部
点击右上角即可分享
微信分享提示