我們在上一篇詳細說明了綱要與使用enterprise manager建立資料表,
說明了如何加入限制、刪除資料與刪除資料表,今天我們將說明限制的相關知識:
限制(constraint):
一般限制分成三種:
1.not null: 禁止此欄位輸入null,表示此欄位一定要有值
2.unique key: 此欄位的內容為唯一值,在此資料表中此欄位內容不能與其他列資料重復。
3.primary key:每一個資料表在資料庫中都需要primary,用於資料列作為唯一辨識,事實上,每一列資料都是以primary key value命名
而通常發生違規事件大概也分三種:
1.唯一性:
嘗試在同一行資料加入重復的數植(通常違反primary與unique限制)
2.資料完整性:
檢查:資料格式檢查,比方說年齡一定要正整數。
3.資料驗證狀態與建立限制操作:
因為在建立資料限制的有分成幾種情況,檢查舊有資料與檢查新進資料,其交互情況下,可以分成四種情況。
3-1.DISABLE NOVALIDATE(不檢查新資料也不檢查舊有資料):通常用於新進資料從以驗證且唯獨的資料表寫入的情況下。
3-2.DISABLE VALIDATE(不檢查新資料,但檢查舊資料):現有資料不會被變更,但新進資料受到現置;通常用於不更改舊資料的內容與索引情況下,也就是說避免校能受到影響。
3-3.ENABLE NOVALIDATE(檢查新資料,但不檢查舊有資料):通常用於現有資料違反限制的資料已經被修正,加上新的限制讓資料不會違反限制。
3-4.ENABLE VALIDATE(檢查新資料也檢查舊有資料):典型且預設的限制。
談到oracle資料庫,其限制檢查的時間點分成兩種:
1.nondeferred
立即性限制,作用於每一個DML敘述:當敘述執行的時候,立刻檢查限制,若違反則立即rollback。
若限制已經是nondeferred,則不能變更成為deferred。
2.deferred
敘述執行的時候,限制不會啟動,等待(transaction) commit指令後,才會見查限制,若違反,則整個transaction roll back。
優點在於擁有外來鍵(foreign key)關係的母子資料欄位,同時有資料輸入的時候。因為資料輸入有順序性,故採用此方法。
語法範例:
alter table employee_data add (unique(employee_id)) ENABLE NOVALIDATE
CREATE TABLE t1 (pk NUMBER PRIMARY, fk NUMBER, c1 NUMBER, c2 NUMBER,
CONSTRAINT ri FOREIGN KEY (fk) REFERENCE t1,CONSTRAINT CHECK (pk>0 and c1>0)
)
--
原本今天要一起說明index 操作,明天要驗收功能,今天偷懶一下