DB2傻瓜1000問(六)6、DB2資料庫物件部分

litterbaby發表於2007-06-08

DB2傻瓜1000問(六)
總結:康標

email:

[@more@]

6、DB2資料庫物件部分
206、 什麼是模式?
模式(schema)是用於在資料庫中建立的資料庫物件的一個高階限定符。它是資料庫物件,例如表、檢視、索引或觸發器的一個集合。它提供了資料庫物件的一個邏輯分類。

207、 系統模式都有那些?
SYSIBM
基本系統編目。不建議直接訪問它。
SYSCAT
這種模式上的 SELECT 許可權被授給 PUBLIC。只讀編目檢視。建議透過它來獲得編目資訊。
SYSSTAT
可更新編目檢視 —— 會影響最佳化器。
SYSFUN
使用者定義函式

208、 系統模式存放在哪裡?
對於每個資料庫,都會建立一組系統模式,並將它們放在 SYSCATSPACE 表空間中。

209、 如何建立一個模式?
建立一個模式,可使用 create schema 命令。

210、 如何顯性指定物件的模式?
顯式地指定物件的模式:schema1.table1

211、 如何在指令碼上使用模式?
set current schema 或 set current sqlid 命令指定物件的模式。

212、 如果沒有顯性指定模式的情況下,會怎麼辦?
如果沒有顯式地指定物件的模式,那麼物件的模式將被設為當前的授權 ID。

213、 什麼是緩衝池?
資料庫緩衝池區域是一塊記憶體,當從磁碟上讀取一個表的索引和資料頁,以便對它們進行掃描或修改時,可以用緩衝池快取它們。緩衝池區域有助於提高資料庫系統的效能,因為它允許從記憶體,而不是磁碟上訪問資料。由於記憶體訪問比磁碟訪問要快得多,因此 DB2 對磁碟讀寫得越少,系統的效能就越好。

214、 系統在建立資料庫時候會自動建立一個預設緩衝池叫什麼名字?
這個緩衝池名為 IBMDEFAULTBP

215、 在WINDOWS下預設緩衝池的大小是多少?
對於 Windows,預設緩衝池大小為 250 頁或 1 MB。

216、 在UNIX下預設緩衝池的大小是多少?
對於 UNIX,預設緩衝池大小為 1,000 頁或 4 MB。

217、 如何建立緩衝池?
使用create bufferpool 命令建立。

218、 DB2資料庫上表是如何分類的?
DB2資料庫上表有永久表和臨時表之分:
永久表包括:
系統目錄表
使用者表

臨時表包括:
系統表
使用者表

219、 系統目錄表存放的內容是那些?
1) 所有資料庫物件的定義
2) 表和檢視列的資料型別
3) 約束定義
4) 物件許可權
5) 物件的依賴

220、 如果在建立一個表時沒有使用 in 子句,那麼如何放置表資料?
如果在建立一個表時沒有使用 in 子句,那麼將按以下順序放置表資料(及其索引和 LOB 資料):
1) 如果有 IBMDEFAULTGROUP 表空間,並且該表空間的頁寬足夠大,則放在這個表空間中。
2) 放在一個使用者建立的表空間中,該表空間具有能滿足表的最小頁寬。
3) 如果有 USERSPACE1 表空間,並且該表空間的頁寬足夠大,則放在 USERSPACE1 中。
IN、INDEX IN 和 LONG IN 子句指定將在其中儲存常規表資料、索引和大型物件的表空間。注意,這隻適用於 DMS 表空間。

221、 如何列出當前使用者的表?
list tables

222、 如何列出資料庫中定義的所有表?
list tables for all

223、 如何列出指定模式中的表?
list tables for schema schemaname

224、 如何顯示指定的表的結構?
describe table tablename

225、 什麼是標識列?
標識列(identity column)是表中的一個數字列,它導致 DB2 為每個被插入表中的行生成一個惟一的數值。一個表最多隻能有一個標識列。這個列的值可以透過 DB2 always 或 by default 兩種方式生成:
1) 如果這些值按 always 方式生成,則總是由 DB2 資料庫生成這些值,應用程式不能提供顯式的值。
2) 如果這些值按 by default 方式生成,那麼可以由應用程式顯式地提供這些值;只有在應用程式沒有提供值的情況下,才由 DB2 生成一個值。 因此,DB2 不能保證這些值是惟一的。該選項用於資料傳播,或者裝載和解除安裝一個表。
我們來看一個例子。假設用以下命令建立表:
create table inventory (partno INTEGER GENERATED ALWAYS AS IDENTITY
(START WITH 100 INCREMENT BY 1), description CHAR(20) )
並執行以下語句:
語句
insert into inventory VALUES (DEFAULT,'door')
insert into inventory (description) VALUES ('hinge')
insert into inventory VALUES (200,'windor')
insert into inventory (description) VALUES ('frame')
結果
inserts 100,door
inserts 101,hinge
error
inserts 102,frame
那麼語句 SELECT * FROM inventory 將產生如下輸出:
100 door
101 hinge
102 frame

226、 SYSIBM模式存放的內容是那些?
用於基礎系統目錄表

227、 SYSCAT模式存放的內容是那些?
用於系統目錄表檢視的定義

228、 SYSSTAT模式存放的內容是那些?
用於存放關於資料庫統計資訊的檢視

229、 預設情況下表存放的預設表空間的選擇是如何選擇的?
按照以下的順序來選擇:
1) IBMDEFAULTGROUP表空間是否存在
2) 有沒有使用者新增的表空間
3) 表空間USERSPACE1是否存在
4) 如果上面的都沒有的話,就會返回一個錯誤

230、 如何基於一個已經存在的表定義一個新表?
CREATE TABLE clone like tablename
或者
CREATE TABLE clone AS (SELECT * FROM tablename) DEFINITION ONLY

231、 如何新增一個表?
CREATE TABLE myemployees (
empID INT NOT NULL PRIMARY KEY,
empname VARCHAR(30) NOT NULL,
mngrID INT NOT NULL,
history CLOB)
IN datadms
INDEX IN indexdms
LONG IN largedms
最後三行是指定存放表空間的位置。

232、 修改表的內容是那些?
可以使用 ALTER TABLE SQL 語句更改表的某些特徵。例如,可以新增或刪除:
1) 列
2) 主鍵
3) 一個或多個惟一性或參照約束
4) 一個或多個檢查約束

233、 如何新增一個新列?
ALTER TABLE myemployees ADD COLUMN address CHAR(45)

234、 如何刪除表?
DROP TABLE myemployees

235、 什麼是約束?
約束是用於來控制什麼資料可以儲存在列中。

236、 約束的分類?
DB2 提供了三種型別的約束:惟一性、參照完整性和表檢查。

237、 什麼是惟一性約束?
惟一性約束 用於確保列中的值是惟一的。可以對一個或多個列定義惟一性約束。


238、 惟一性約束都是那些?
惟一性約束中包括的每個列都必須定義為 NOT NULL和PRIMARY KEY 或 UNIQUE 約束。

239、 PRIMARY KEY 或 UNIQUE 約束的區別?
DB2 在一個表中只允許定義一個主鍵;但可以定義多個惟一性約束。

240、 如何定義PRIMARY KEY 或 UNIQUE 約束?
可以在建立表時作為 CREATE TABLE SQL 語句的一部分定義,也可以在建立表後使用 ALTER TABLE 語句新增。

241、 什麼是參照完整性約束?
參照完整性約束 用於定義表之間的關係並確保這些關係保持有效。

242、 什麼是表檢查約束?
表檢查約束 用於確保列資料不違反為列定義的規則,並限制表的某一列中的值。DB2 確保在插入和更新時不違反這些約束。

243、 如何在表上設定預設值?
使用DEFAULT字句
CREATE TABLE company (
companyID INTEGER,
companyName VARCHAR(30),
city VARCHAR(20) DEFAULT 'TORONTO'
)

244、 如何如何使用預設值插入表?
有兩種方式,可以得到同樣的結果:
(1)INSERT INTO company (companyID, companyName, city)
VALUES ( 111 , 'cityOne' , DEFAULT)
(2)INSERT INTO company (companyID, companyName)
VALUES ( 111, 'cityOne' )

245、 如何在表上自動生成連續的數字?
使用CREATE TABLE語句中的GENERATED子句:
CREATE TABLE product (
productno INTEGER GENERATED ALWAYS AS
IDENTITY (START WITH 200 INCREMENT BY 1),
description VARCHAR(50) )
這時不能插入其他的值。因為使用了ALWAYS
如果使用GENERATED BY DEFAULT就可以自己主動插入值。
同時還可以這樣使用:
CREATE TABLE income (
empno INTEGER,
salary INTEGER,
taxRate DECIMAL(5,2),
netSalary DECIMAL(7,2) GENERATED ALWAYS AS (salary * (1 - taxRate))
)

INSERT INTO income (empno, salary, taxRate) VALUES (111, 50000, 0.3)

EMPNO SALARY TAXRATE NETSALARY
----------- ----------- ------- ---------
111 50000 0.30 35000.00

246、 如何使用唯一約束?
使用UNIQUE 或者 PRIMARY KEY
CREATE TABLE employ (
empID INT NOT NULL PRIMARY KEY,
name CHAR(30) ,
deptID INT NOT NULL UNIQUE
)

247、 如何新增檢查約束?
CREATE TABLE student (
student_ID INT NOT NULL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
sex CHAR(1) NOT NULL
CONSTRAINT sex_check_const CHECK (sex in ('M ', 'F '))
)
或者
ALTER TABLE student
ADD CONSTRAINT sex_check_const CHECK (sex in ('M ', 'F '))

248、 表的系統編目表?
SYSIBM.SYSTABLES和SYSIBM.SYSCOLUMNS

249、 什麼是表的壓縮?
行壓縮的方法是檢視整個表,找到重複的位元組字串,將那些字串儲存在一個字典中,然後用一個表示儲存在字典中的實際資料的符號代替出現在表中的那些符號。

250、 表的壓縮的優點是什麼?
其主要優點是,DB2 看到的是表中的所有資料以及完整的資料行 —— 而不只是重複的列值。

251、 使用表壓縮的步驟是什麼?
對一個新表進行表壓縮的步驟,如果從一個新的系統開始,那麼可能需要:
1) 用 compression yes 建立表。
2) 將示例資料裝載到表中。
3) 用 resetdictionary 重組表,以建立一個新的字典。
4) 將剩下的資料裝載到表中(這次的裝載將遵從上述字典,並在裝載的同時進行壓縮)。

252、 如何使用表壓縮?
create table table_name ... compress yes

alter table tablename compress yes

253、 如何建立壓縮字典?
reorg table table_name resetdictionary

254、 如何估計表壓縮節約的空間?
db2 inspect rowcompestimate table name table_name results keep file_name

255、 檢視的系統編目表?
SYSIBM.SYSVIEWS
SYSCAT.VIEWS
SYSCAT.VIEWDEP

256、 如何關閉資料一致性?
SET INTEGRITY FOR student OFF

257、 使用索引的主要原因是什麼?
1、 提高查詢速度。
2、 在定義為唯一的時候,保證唯一性。

258、 檢視的分類?
可刪除檢視
可更新檢視
可插入檢視
只讀檢視

259、 如何新增資料庫分割槽組?
CREATE DATABASE PARTITION DROUP name ON DBPARTITIONNUMS( )

260、 如何修改資料庫分割槽組?
ALTER DATABASE PARTITION GROUP name ADD DBPARTITIONNUM ()

261、 如何列出資料庫分割槽組?
LIST DATABASE PARTITION GROUPS
LIST DATABASE PARTITION GROUPS SHOW DETAIL

262、 如何刪除資料庫分割槽組?
DROP DATABASE PARTITION GROUP name

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

相關文章