如何在Oracle数据库表中添加1-600万的自增列(SQL Developer新手指南)
给Oracle百万级表添加自增列并初始化1-600万编号
方法一:Oracle 12c及以上版本(推荐,最简操作)
1. 一步添加并初始化自增列
直接执行这条SQL,它会自动给现有600万条记录从1开始依次赋值,之后新插入的记录也会自动递增编号:
ALTER TABLE 你的表名 ADD 自增列名 NUMBER GENERATED ALWAYS AS IDENTITY START WITH 1 INCREMENT BY 1;
- 替换
你的表名和自增列名为实际名称,比如ALTER TABLE user_info ADD id NUMBER GENERATED ALWAYS AS IDENTITY START WITH 1 INCREMENT BY 1;
2. 可选:设置为主键
如果需要把这个自增列设为主键,执行:
ALTER TABLE 你的表名 ADD CONSTRAINT pk_你的表名_自增列名 PRIMARY KEY (自增列名);
方法二:Oracle 11g及以下版本(兼容旧版本)
1. 先添加普通数值列
ALTER TABLE 你的表名 ADD 自增列名 NUMBER;
2. 给现有记录初始化1-600万编号
用ROW_NUMBER()函数按指定列排序后赋值,替换主键列为表的主键或唯一标识列(确保排序稳定):
UPDATE 你的表名 t SET t.自增列名 = (SELECT rn FROM ( SELECT 主键列, ROW_NUMBER() OVER (ORDER BY 主键列) rn FROM 你的表名 ) x WHERE x.主键列 = t.主键列);
- 执行前可以先跑子查询验证:
SELECT 主键列, ROW_NUMBER() OVER (ORDER BY 主键列) rn FROM 你的表名 WHERE ROWNUM <= 10;,确认编号逻辑没问题再执行全表更新。
3. 创建序列供新记录自增
CREATE SEQUENCE seq_你的表名_自增列名 START WITH 6000001 -- 现有数据到600万,新记录从6000001开始 INCREMENT BY 1 NOCACHE;
4. 创建触发器,插入时自动赋值
CREATE OR REPLACE TRIGGER trg_你的表名_自增列名 BEFORE INSERT ON 你的表名 FOR EACH ROW BEGIN SELECT seq_你的表名_自增列名.NEXTVAL INTO :NEW.自增列名 FROM DUAL; END; /
5. 可选:设置为主键
ALTER TABLE 你的表名 ADD CONSTRAINT pk_你的表名_自增列名 PRIMARY KEY (自增列名);
新手操作提示
- 在SQL Developer中执行时,每次选中单条语句运行,避免一次性执行多条出错;
- 600万条记录的UPDATE可能需要几分钟,执行前确保没有其他会话占用该表;
- 如果UPDATE时出现性能问题,可以按主键范围分批更新(比如
WHERE 主键列 BETWEEN 1 AND 100000),分多次完成。
内容的提问来源于stack exchange,提问作者Stephen - Developer
相关产品推荐
相关产品推荐

