「iThome 第七屆鐵人賽 21」管理schema object(II)

熱門文章 (Popular Post)

Posted by : Duran Hsieh 2015-01-07


我們在上一篇詳細說明了綱要與使用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 操作,明天要驗收功能,今天偷懶一下


Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Duran Hsieh @ Duran 的技術冶煉廠 - Date A Live - Powered by Blogger - Designed by Johanes Djogan -