如何在Oracle与MySQL表中新增序列列作为主键
解决方案
以下操作均假设你要修改的实际表名为your_table,执行前请替换为你的业务表名,且提前做好数据备份。
MySQL 环境
直接新增自增主键列即可,语句执行后会自动为现有所有行分配从1开始的连续唯一值,后续新插入数据也会自动生成序列值:
ALTER TABLE your_table ADD COLUMN SQ INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
如果不需要将SQ列放在表的第一列,去掉语句末尾的FIRST关键字即可。
Oracle 环境
12c 及以上版本(推荐)
可直接新增自增标识主键列,一条语句完成新增、填充现有数据、配置新数据自动生成逻辑:
ALTER TABLE your_table ADD SQ NUMBER(10) GENERATED ALWAYS AS IDENTITY PRIMARY KEY;
11g 及更低版本
需要配合序列实现:
- 先创建序列对象
CREATE SEQUENCE sq_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
- 新增SQ主键列
ALTER TABLE your_table ADD SQ NUMBER(10) PRIMARY KEY;
- 为现有所有行填充序列值
UPDATE your_table SET SQ = sq_seq.NEXTVAL; COMMIT;
- 如需新插入数据自动生成序列值,可创建触发器(可选):
CREATE OR REPLACE TRIGGER trg_your_table_sq BEFORE INSERT ON your_table FOR EACH ROW BEGIN :NEW.SQ := sq_seq.NEXTVAL; END; /
注意事项
- 若表数据量较大,Oracle环境的UPDATE操作会占用较多系统资源,建议在业务低峰期执行
- 如果对序列起始值、步长有自定义需求,可对应修改序列创建参数、自增列配置
内容的提问来源于stack exchange,提问作者WooseokChoi
相关产品推荐
相关产品推荐

