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,
浙公网安备 33010602011771号