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 @ 2024-06-28 14:42  五字妹妹实在是棒  阅读(694)  评论(0)    收藏  举报
返回顶部