如果是MySQL表,那么任務就很簡單,一句SQL可以搞定。而DB2表,就要費一點周折了。
首先,我們來看一眼目標表:
這個表,有字段有數據,我們需要做的是,給它加一個唯一性的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表,是否是我們想要的:
最后驗證達到要求了。
就是這樣,在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 下載。