自己整理的學習資料——DB2 V8資料庫基礎(十二)

rheet1978發表於2008-09-23

2.5    通用物件

1.  自增欄位IDENTITY

A. Generated  always

值由DB2生成,客戶不能直接賦值

B. Generated  by default

值可由DB2生成,也可以准許客戶直接賦值,不過DB2不能保證提供的值唯一。

C. identity_val_local()  獲取當前值

insert into t1 (id,…) values (default,…)

  Select identity_val_local() from sysibm.sysdummy1

  insert into parent_table (pk_id,…) values (default,…)

  insert into children_table (…,fk_id,…) values (,identity_val_local(),…)

       Example

Create table t1

(id int  generated always as identity (start with 100 increment by 1),description char(10);

       Commit;

       Insert into t1 values (default,’a1’);                     //insert 100  a1

    Insert into t1(description) values (’a1’);                     //insert 101  a1

       Insert into t1 values (200,’a1’);                   //erro

       Commit;

       Insert into t1(description) values (’a1’);                     //insert 102  a1

       Rollback;

       Insert into t1(description) values (’a1’);                     //insert 103  a1

       Commit;

       Select * from t1

100        a1

101        a1

103  a1

 

Create table t1

      (id int  generated by default as identity (start with 100 increment by 1),description char(10)) in userspace1

       Commit;

       Insert into t1 values (default,’a1’);                     //insert 100  a1

    Insert into t1(description) values (’a1’);                     //insert 101  a1

       Insert into t1 values (200,’a1’);                   // insert 200  a1

       Insert into t1 values (102,’a1’);                   // insert 102  a1

       Commit;

       Insert into t1(description) values (’a1’);              //erro ,因此自增的當前值為102,資料庫中已

經存在102的主鍵值了

       Insert into t1(description) values (’a1’);                     //insert 103  a1

       Commit;

       Select * from t1

100        a1

101        a1

102        a1

103        a1

200  a1

2.  Sequence

A.建立方式

Create sequence  myseq

Start with 1

Increment by 1

No cycle

Bsyntax(語法)

Nextval  for 

Prevval  for 

 

Example:

Insert into t1 (nextval for myseq ,…)

Select prevval  for myseq   from sysibm.sysdummy1

 

C.更改序列

         ALTER  SEQUENCE 序列名

                可以修改的引數

                       START WITHSTART_NUMBER

                       INCREMENTVALUE1

                       NO MAXVALUE的數值

                       NO  CYCLE屬性

                       MAXIMUM  NUMBER  OF  SEQUENCE  VALUES最大數值

  

  D.刪除序列

  DROP  SEQUENCE  序列名

 

3.  Index

語法:Create index index_name  on  表名(col_name

Example

Create  unique  index  index1  on  t1description desc         //建立唯一索引

Create  index  index1  on  t1descriptionallow reverse scans     //准許反向檢索

Create  index  index1  on  t1descriptioncluster  allow reverse scans //簇索引

Create  unique  index  index1  on  t1descriptioninclude id  

 //包含的列代表把值放到索引裡面,這樣通過索引查到要找的列時,直接可以找到列的值,不用再通過索引定位到資料頁查詢列值了,只有唯一索引才能有包含列

 

4.  Foreign key

create table t1(id int not null primary key,description char(10)) in userspace1

create table t2(id int not null primary key,description char(10)) in userspace1

alter table t2 add constraint fk1 foreign key (id) referenceS t1(id)     t1id可以省略

約束的增加方式是按通用的方式:

ALTER TABLE 表名 add constraint 約束名 約束型別  列名,如: //增加約束

ALTER TABLE 表名  drop constraint約束名

比如alter table t1 add constraint pk1 primary key (id)

5.  Check約束(和通用方式沒有差別,具體見資料庫開發人員版)

ALTER TABLE  authors

ADD  constraint authors_chk_phone  check

        (authors  in (‘a’,’b’,’c’))

2.26   觸發器

TRIGGER不能修改,只能刪除重建

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-462715/,如需轉載,請註明出處,否則將追究法律責任。

相關文章