如果是MySQL表,那么任务就很简单,一句SQL可以搞定。而DB2表,就要费一点周折了。

首先,我们来看一眼目标表:

给DB2某表增加一个自增长列-LMLPHP

这个表,有字段有数据,我们需要做的是,给它加一个唯一性的ID列。

我们可以通过工具获得其DML如下:

CREATE TABLE RTTS.T1(CUSTOMER_ID CHAR(20) NOT NULL, PRODUCT_ID INTEGER NOT NULL);

接下来,要创建一个类似的表,但要多增加一个自增的ID字段,建表语句如下:

CREATE TABLE RTTS.T2(id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1,INCREMENT BY 1,NO CACHE) PRIMARY KEY,CUSTOMER_ID CHAR(20) NOT NULL, PRODUCT_ID INTEGER NOT NULL);

注意id这个字段不一定非要是主键,更可以换成别的名。你完全可以根据自己情况调整的。

再接下来,需要把原有表的数据导入到新表里,采用如下语句:

INSERT INTO RTTS.T2(CUSTOMER_ID,PRODUCT_ID) SELECT CUSTOMER_ID,PRODUCT_ID FROM RTTS.T1;

然后,删除掉原来的表(为安全起见,可以改名,待新表数据确认无误再删除):

drop table RTTS.T1

再将新表改名:

RENAME TABLE "RTTS"."T2" TO "T1"

最后看一眼“新的”T1表,是否是我们想要的:

给DB2某表增加一个自增长列-LMLPHP

最后验证达到要求了。

就是这样,在MySQL里面,类似alter table test_tb  add ID int(10) primary key AUTO_INCREMENT;的语句,一句话能做到的事情,在DB2里还是费事些。

DB2毕竟老,很多事情的解决之道都不是为现在用户设计的,而MySQL是。而MySQL进了Oracle的门以后,前途...有点可惜了。

以上代码是在dbvis.exe里执行过的,您可以从 http://pan.baidu.com/s/1gmGem 下载。

05-06 17:01