DB2數(shù)據(jù)庫對象基礎(chǔ)知識_第1頁
DB2數(shù)據(jù)庫對象基礎(chǔ)知識_第2頁
DB2數(shù)據(jù)庫對象基礎(chǔ)知識_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、DB2 數(shù)據(jù)庫對象基本數(shù)據(jù)庫對象數(shù)據(jù)庫對象是一個數(shù)據(jù)庫的構(gòu)造塊(building block )。DB2提供了不同類型的數(shù)據(jù)庫對象來存儲和表示不同信息。 通過使用數(shù)據(jù)定義語言 (DDL ),可以創(chuàng)建、 修改和刪除數(shù)據(jù)庫對象。 要操縱數(shù)據(jù)庫對象, 可以使用數(shù)據(jù)操縱語言 (DML ),例如 SELECT 、UPDATE 、INSERT 和 SELECT 語句。常用的數(shù)據(jù)庫對象有:表用戶定義數(shù)據(jù)類型約束視圖索引除了 Family Fundamentals 教程里介紹的一些數(shù)據(jù)庫對象外,還有一些其他的對象,很多開 發(fā)人員在開發(fā) DB2 應(yīng)用程序時會發(fā)現(xiàn)這些對象比較有用。本節(jié)我們將介紹這些對象。在繼續(xù)之

2、前,有一點要注意:在下面看到的一些例子中, 對象名稱是以小寫形式指定的。無 論 DB2 在哪個平臺上運行, 它總是以大寫形式存儲名稱, 除非標識符的名稱以雙引號 ( "" ) 括起來了。例如,下面的語句創(chuàng)建一個名為employee (小寫)的表,該表的列定義與表EMPLOYEE(大寫)是一樣的。CREATE TABLE "employee" LIKE employee別名別名(alias)是指一個已有的表、視圖的另一個名稱,也叫昵稱(nickname)。別名也可以作為另一個別名的昵稱。 與這些對象一樣, 別名也可以被創(chuàng)建或刪除, 可以有與之相關(guān)的注 釋。

3、下面是 CREATE ALIAS 語句的一些例子:CREATE ALIAS aliastab1 FOR tab1;CREATE ALIAS bob.aliastab1 FOR tom.tab1;CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;可以看到, CREATE ALIAS 語句比較簡單??梢栽谠磳ο笏诘耐荒J街袆?chuàng)建別名(如第 1 行),或者也可以全限定別名(如第 2 行)。為了與 DB2 for zSeries 兼容,使用關(guān)鍵 字 SYNONYM 代替 ALIAS 也是合法的(如第 3 行)。使用別名時無需專門的授權(quán)或權(quán)限。不過,需要獲得

4、與別名所引用的底層對象相關(guān)的授權(quán)。關(guān)于數(shù)據(jù)庫對象權(quán)限的完整清單,請參考DB2 DBA認證教程Server management (請參閱參考資料)。前面已提到, 我們也可以為 昵稱 創(chuàng)建別名。 昵稱是引用位于聯(lián)邦系統(tǒng)上的數(shù)據(jù)表或視圖的 數(shù)據(jù)庫對象。聯(lián)邦數(shù)據(jù)庫支持超出了本教程的范圍。在本教程系列的第2 部分, Datamanipulation ,我們將學習更多有關(guān)聯(lián)邦系統(tǒng)的知識。要為別名添加注釋,可以發(fā)出以下語句:COMMENT ON aliastab1 IS 'My first alias on tab1'要刪除一個別名,使用 DROP 語句,這與所有其他數(shù)據(jù)庫對象是一樣的:D

5、ROP ALIAS aliastab1序列對象序列(sequenee)是一種數(shù)據(jù)庫對象, 這種對象允許自動生成值。序列對象與標識列 (identitycolumn)不同,標識列是要與一個特定的表綁在一起的,而序列是一種全局的、 獨立的對象,同一個數(shù)據(jù)庫中的任何表都可以使用它。標識列是序列對象的一種特例。 因此, 標識列的特征也適用于序列對象。 下面就例釋了一條CREATE SEQUENCE 語句:CREATE SEQUENCE myseq AS INTEGERSTART WITH 360INCREMENT BY 10NO MAXV ALUECYCLECACHE 20任何包括 0 在內(nèi)的數(shù)字數(shù)據(jù)

6、類型都可用于序列值。 這些類型包括 SMALLINT 、 INTEGER 、 BIGINT 或DECIMAL?;谶@些數(shù)據(jù)類型的任何用戶定義獨特類型( distinct type )也都可 以用于序列值。這進一步擴展了用戶定義獨特類型在應(yīng)用程序中的使用。如上面的例子所示,您可以為序列對象指定起始值,從而自定義序列對象。在這個例子中, 序列的第一個值是 360。后續(xù)值的生成是由 INCREMENT BY 子句控制的。 這里還支持正、負常量,以產(chǎn)生升序和降序值。缺省情況下,一個序列所生成的最小值和最大值是由該序列數(shù)據(jù)類型的取值范圍來界定的。 例如, INTEGER 類型的序列值必須處在 -2,14

7、7,483,647 到 2,147,483,647 之間的范圍內(nèi)。 在 DB2 SQL Reference Guide 中可以找到所有數(shù)字數(shù)據(jù)類型的取值范圍。 為了改變這種缺省 行為, 可以使用 MINV ALUE 和 MAXV ALUE 選項來為生成的值設(shè)置一個邊界。 如果達到 了最小值或最大值,那么可以使用另一個選項,即 CYCLE 或 NO CYCLE 來規(guī)定序列值 是否應(yīng)該循環(huán)。注意,如果 CYCLE 生效,則序列就可以生成重復(fù)的值。CACHE 選項允許 DB2 將一些預(yù)先分配好空間的值保留在內(nèi)存中, 以提高性能。 CACHE 20 是缺省的行為。關(guān)于這個選項有一點要謹記:如果在所有緩

8、存的值被使用之前關(guān)閉DB2 ,那么任何緩存的值和未使用的值都將被丟棄。 當 DB2 重新啟動時, 又會生成和緩存下一塊 的值,從而造成值之間的不連續(xù),即值之間存在間隔。如果應(yīng)用程序不允許值之間有間隔, 可以考慮使用 NOCACHE 選項。如果沒有使用緩存, 則性能就會下降, 因為要頻繁地生成序列數(shù)字。 每當生成一個新值的時 候,都會寫下一條日志記錄。因此, 更高效的做法是根據(jù)請求來獲取值,并將這些值緩存在 內(nèi)存中。通過 ALTER SEQUENCE 語句,可以更改序列對象的特征。除了序列值的數(shù)據(jù)類型以外, 上面所討論的所有的設(shè)置都可以修改。 要獲得完整的語法, 請參考 DB2 SQL Refe

9、rence Guide (請參閱 參考資料) 。刪除一個序列對象與刪除任何其他的數(shù)據(jù)庫對象是一樣的, 不同之處是這里還要使用到一個 RESTRICT 關(guān)鍵字。這樣可以防止在有依賴的情況下刪除序列。DROP SEQUENCE myseq RESTRICT生成和獲取序列值序列是一種數(shù)據(jù)庫對象, 因此對序列的訪問也是由權(quán)限來控制的。 缺省情況下, 只有序列的 創(chuàng)建者,即 SYSADM 和 DBADM 擁有該對象的 USAGE 權(quán)限。如果希望其他用戶也能 夠使用序列,則需要使用下面的語句:GRANT USAGE ON SEQUENCE seq_object_name TO PUBLIC有兩種表達式可用

10、于生成和獲取序列值。 NEXTV AL FOR seq-name 用于獲取下一個序列值, 而 PREVV AL FOR seq-name 則用于獲取上一個生成的序列值。 下面的例子例釋了這些表達 式的使用。INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'BOB');INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'PAT'); COMMIT;INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'GENE');ROLLBACK;IN

11、SERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'PAUL');VALUES PREVVAL FOR myseq INTO :hostvar假設(shè)我們以一個空表 t1 開始, myseq 的下一個序列值是 1。如果禁用了 autocommit ,則 在執(zhí)行上述語句之后, t1 將包含下面幾行:1 NAME 1 BOB2 PAT4 PAUL3 record(s) selected.雖然為 GENE 生成的值被回滾了, 但是 DB2 并沒有再次使用它。 因而,下一個為 PAUL 生 成的序列值就是 4,而不是 3。這個例子中的最后一條語句展示了如何使用 PREVVAL 表達式。宿主變量 :hostvar 存儲當 前會話中生成的最后一個值。 如果想保存前面生成的值, 那么應(yīng)該在生成下一個值之前保存 PREVV AL 值。臨時表顧名思義,臨時表(temporary table)不是永久性的數(shù)據(jù)庫對象。臨時表與普通的表在行為 上是一樣的,不同之處是,并非所有的功能和選項都是受支持的和/或是必需的。臨時表只能維持在一次連接期間。當連接關(guān)閉時,在此連接內(nèi)聲明的所有臨時表都將自動刪除掉。只有聲明臨時表的會話或應(yīng)用程序才能訪問臨時表。 如果兩個應(yīng)用程序用相同的名字創(chuàng)建了 一個臨時表, 該臨時表的每個實例仍然是惟一的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論