DB2中列的唯一值的定義 在定義表的時候,需要指定一個或者多個字段作為主鍵;定義為主鍵的列必須是not null,且unique; 唯一值的列,及在所有的數據行中,該列的數據值不會重復; 對於唯一值的列,DB2提供了如下幾種生成數據的方法。 1、IDENTITY列,數值型。 create table emp_info( empno int not null generated as identity, --自動增長 empinfo_change timestamp, ename varchar(20), address varchar(30) ) IDENTITY屬性其實是一個自動增長的序列,默認startwith=1,increment=1,cache=20。 在添加數據的時候,不需要指定自動增長列的值,否則將會返回錯誤信息: insert into emp_info(empno,empinfo_change,ename,address) values(101,current_timestamp,'SCOTT','CHANGCHUN JILIN CHINA') DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在 SQL 處理期間,它返回: SQL0798N 不能為定義為 GENERATED ALWAYS 的列 "EMPNO" 指定值。 SQLSTATE=428C9 insert into emp_info(empinfo_change,ename,address) values(current_timestamp,'SCOTT','CHANGCHUN JILIN CHINA') db2 => select * from emp_info EMPNO EMPINFO_CHANGE ENAME ADDRESS ----------- -------------------------- -------------------- ------------------------------ 1 2013-03-28-18.26.06.734000 SCOTT CHANGCHUN JILIN CHINA 1 條記錄已選擇。 insert into emp_info(empinfo_change,ename,address) values(current_timestamp,'ChenLinBo','CHANGCHUN JILIN CHINA') DB20000I SQL 命令成功完成。 db2 => select * from emp_info EMPNO EMPINFO_CHANGE ENAME ADDRESS ----------- -------------------------- -------------------- ------------------------------ 1 2013-03-28-18.26.06.734000 SCOTT CHANGCHUN JILIN CHINA 2 2013-03-28-18.27.04.408000 ChenLinBo CHANGCHUN JILIN CHINA 2 條記錄已選擇。 2、FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,timestamp類型。 對於timestamp類型的列,若想讓此列自動填充當前時間戳的話,可以指定列的屬性為: FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP。 這種類型的列,只能在定義或者修改表的時候新增列,否則一個timestamp類型的列定義之後,就無法修改為改屬性了。 我們先將上表emp_info中的empinfo_change列刪除,再增加一個timestamp類型的自動填充當前時間戳的列。 ALTER TABLE emp_info DROP COLUMN empinfo_change ALTER TABLE emp_info ADD COLUMN emp_info_chg timestamp NOT NULL GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP 因為表的結構發生了變化,所以需要重構一下表;否則將會報錯! reorg table emp_info 添加數據之後,如下: db2 => SELECT * FROM EMP_INFO EMPNO ENAME ADDRESS EMP_INFO_CHG ----------- -------------------- ------------------------------ -------------------------- 1 SCOTT CHANGCHUN JILIN CHINA 2013-03-28-19.41.18.777000 2 ChenLinBo CHANGCHUN JILIN CHINA 2013-03-28-19.41.18.777001 22 yeeXun changchun 2013-03-28-19.41.24.175000 23 CSDN beijing 2013-03-28-19.43.48.647000 4 條記錄已選擇。 修改表之後,emp_info_chg列自動填充了當前時間戳值。 db2 => update emp_info set address ='tianjin' where empno=2 DB20000I SQL 命令成功完成。 db2 => select * from emp_info EMPNO ENAME ADDRESS EMP_INFO_CHG ----------- -------------------- ------------------------------ -------------------------- 1 SCOTT CHANGCHUN JILIN CHINA 2013-03-28-19.41.18.777000 2 ChenLinBo tianjin 2013-03-28-20.25.39.736000 22 yeeXun changchun 2013-03-28-19.41.24.175000 23 CSDN beijing 2013-03-28-19.43.48.647000 3、序列 序列用來實現列的自增長,可以再添加數據的時候使用序列,但是序列的屬性一定為no cycle;下面是序列的兩個偽列: next value:表示下一個序列值,可以使用nextval替代; previous value:表示當前序列值,可以使用currval替代。 來源:http://blog.csdn.net/bobo12082119/article/details/8734679