oracle数据库,怎么给已有数据的表添加自增字段
场景:数据仓库,ODI为使用Oracle Incremental Update IKM,需要对一事实表增加主键。
思想:基于老表创建新表,添加自增字段(序列+触发器实现),把老数据导入新表,删除老表,修改新表名字为老表
[1] 假如有一测试表DEPT,我们要给DEPT表增加ID字段
CREATE TABLE DEPT AS SELECT * FROM SCOTT.DEPT
或者自己创建
1 2 3 4 5 6 7 8 9 10 11 | DROP TABLE "DEPT" ; CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2) NOT NULL , "DNAME" VARCHAR2(14 BYTE) NULL , "LOC" VARCHAR2(13 BYTE) NULL ) ; INSERT INTO "DEPT" VALUES ( '10' , 'ACCOUNTING' , 'NEW YORK' ); INSERT INTO "DEPT" VALUES ( '20' , 'RESEARCH' , 'DALLAS' ); INSERT INTO "DEPT" VALUES ( '30' , 'SALES' , 'CHICAGO' ); INSERT INTO "DEPT" VALUES ( '40' , 'OPERATIONS' , 'BOSTON' ); |
【2】创建一个新表DEPT1
方法1: 导出源表结构,增加一个字段ID
CREATE TABLE "DEPT1" ( "ID" NUMBER(2) PRIMARY KEY, "DEPTNO" NUMBER(2) NOT NULL , "DNAME" VARCHAR2(14 BYTE) NULL , "LOC" VARCHAR2(13 BYTE) NULL )
方法2:
---只会复制表数据和表结构,不会有任何约束 CREATE TABLE DEPT1 AS SELECT * FROM DEPT WHERE 1<>1 --添加列 ALTER TABLE "DEPT1" ADD ID NUMBER ALTER TABLE "DEPT1" ADD PRIMARY KEY ("ID");
【3】创建自增序列
DROP SEQUENCE SEQ_DEPT CREATE SEQUENCE SEQ_DEPT INCREMENT BY 1 START WITH 1 MINVALUE 1 NOMAXVALUE NOCYCLE NOCACHE;
【4】触发器实现ID自增加
DROP TRIGGER TRG_BEFORE_INSERT_DEPT CREATE TRIGGER TRG_BEFORE_INSERT_DEPT BEFORE INSERT ON DEPT1
FOR EACH ROW BEGIN SELECT SEQ_DEPT.NEXTVAL INTO :NEW.ID FROM DUAL ; END ;
【5】老数据导入新表DEPT1
INSERT INTO DEPT1("DEPTNO", "DNAME", "LOC") SELECT * FROM DEPT
【6】删除旧表DEPT
DROP TABLE DEPT
【7】DEPT1改名为DEPT
RENAME DEPT1 TO DEPT
---或者 ALTER TABLE DEPT RENAME TO DEPT;
【8】触发器会自动更新为新表。
DROP TRIGGER TRG_BEFORE_INSERT_DEPT CREATE TRIGGER TRG_BEFORE_INSERT_DEPT BEFORE INSERT ON DEPT FOR EACH ROW BEGIN SELECT SEQ_DEPT.NEXTVAL INTO :NEW.ID FROM DUAL ; END ;
最终结果:
【推荐】国内首个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 绘制太阳,地球,月球 运作规律