kingbase在原有表中增加自增id并自动填充

前言

最近遇到一个问题,金仓数据库不支持联合主键,需要新增一个自增主键,但是原有的数据表中已有好几万条数据,手动增加不可能,写程序循环添加虽然可行,但是过于麻烦,所以有了以下方法

解决

一开始想自己写程序搞,但是我先问了下AI(Claude 3.5 Sonnet),发现真的给了一个方案,具体如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- 1. 首先添加id字段
ALTER TABLE sys_branch_struct_relation
ADD COLUMN id BIGINT;

-- 2. 创建序列
CREATE SEQUENCE sys_branch_struct_relation_seq
INCREMENT BY 1
MINVALUE 1
NO MAXVALUE
START WITH 1
CACHE 1;

-- 3. 为现有数据更新id值
UPDATE sys_branch_struct_relation
SET id = nextval('sys_branch_struct_relation_seq');

-- 4. 设置id为主键
ALTER TABLE sys_branch_struct_relation
ADD CONSTRAINT sys_branch_struct_relation_pk PRIMARY KEY (id);

-- 5. 设置id默认值为序列的下一个值
ALTER TABLE sys_branch_struct_relation
ALTER COLUMN id SET DEFAULT nextval('sys_branch_struct_relation_seq');

-- 6. 将原复合主键改为唯一索引(如果需要的话)
ALTER TABLE sys_branch_struct_relation
ADD CONSTRAINT uk_ancestor_descendant UNIQUE (ancestor, descendant);

我的表中原有就两个字段ancestor, descendant,因为是个关系表,没有多余的字段

经过实测,居然真的没有问题,重点是这个是国产的金仓数据库,而且AI是国外的!