Oracle列自增实现(3)-DEFAULT Values Using Sequences
Oracle 12c中,可以使用序列的NEXTVAL
and CURRVAL
的值作为默认值,来实现列自增!
一、使用序列的NEXTVAL
and CURRVAL
的值作为默认值
创建序列
CREATE SEQUENCE t1_seq;
建表
CREATE TABLE t1 ( id NUMBER DEFAULT t1_seq.NEXTVAL, description VARCHAR2(30) );
插入数据
INSERT INTO t1 (description) VALUES ('DESCRIPTION only'); INSERT INTO t1 (id, description) VALUES (999, 'ID=999 and DESCRIPTION'); INSERT INTO t1 (id, description) VALUES (NULL, 'ID=NULL and DESCRIPTION');
查询结果
SELECT * FROM t1;
二、默认值明确为非空
创建两个序列
CREATE SEQUENCE default_seq; CREATE SEQUENCE default_on_null_seq;
建表,col1和col2分别使用上面两个序列的NEXTVAL作为默认值,其中col2 DEFAULT ON NULL
CREATE TABLE t2 ( col1 NUMBER DEFAULT default_seq.NEXTVAL, col2 NUMBER DEFAULT ON NULL default_on_null_seq.NEXTVAL, description VARCHAR2(30) );
插入数据
INSERT INTO t2 (description) VALUES ('DESCRIPTION only'); INSERT INTO t2 (col1, col2, description) VALUES (999, 999, '999,999,DESCRIPTION'); INSERT INTO t2 (col1, col2, description) VALUES (NULL, NULL, 'NULL,NULL,DESCRIPTION');
查询数据,可以看到col2位NULL时候,被默认转换使用了default_on_null_seq.NEXTVAL的
SELECT * FROM t2;
三、例子:主从表的简单例子
CREATE SEQUENCE master_seq;
CREATE SEQUENCE detail_seq;
CREATE TABLE master (
id NUMBER DEFAULT master_seq.NEXTVAL,
description VARCHAR2(30)
);
CREATE TABLE detail (
id NUMBER DEFAULT detail_seq.NEXTVAL,
master_id NUMBER DEFAULT master_seq.CURRVAL,
description VARCHAR2(30)
);
INSERT INTO master (description) VALUES ('Master 1');
INSERT INTO detail (description) VALUES ('Detail 1');
INSERT INTO detail (description) VALUES ('Detail 2');
INSERT INTO master (description) VALUES ('Master 2');
INSERT INTO detail (description) VALUES ('Detail 3');
INSERT INTO detail (description) VALUES ('Detail 4');
SELECT * FROM master;
SELECT * FROM detail;
原文:
DEFAULT Values for Table Columns : Enhancements in Oracle Database 12c Release 1 (12.1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律