程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2中列的唯一值的定義

DB2中列的唯一值的定義

編輯:DB2教程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved