轉載:oracle添加約束禁用延遲

添加NOT NULL約束

alter table tb_name數據庫

modity column_name constraint nt_name not null;學習

須要注意的是,添加NOT NULL約束並不使得add constraint語句,而是使用modify。索引

添加FOREIGN KEY約束

alter table tb_name1事務

add constraint fk_name開發

foreign key (column_name1) references tb_name2(column_name2);it

在添加外鍵時,若在最後添加關鍵字on delete cascade,則在父表中刪除一行記錄時,子表中匹配的全部行也都將被刪除。若添加關鍵字on delete set null則在父表刪除一行記錄時,子表中外鍵將被設置爲空值。若添加關鍵字on delete no action則在父表刪除一行記錄時,子表中外鍵不作任何處理。io

添加PRIMARY KEY約束

alter table tb_nametable

add constraint uk_name primary key (column_name);效率

添加CHECK約束

alter table tb_namedate

add constraint ck_name check (column_condition);

通常狀況下,在添加一個約束時,表中現有的全部行都必須知足這個約束條件。然而,若是在最初添加約束時能夠禁用約束並能夠經過指定ENABLE NOVALIDATE選項來讓約束只適用於新添加的數據。

添加UNIQUE約束

alter table tb_name

add constraint uq_name unique(column_name);

刪除約束

alter table tb_name

drop constraint 約束名;

在刪除主鍵約束時,若存在主外鍵關係,則必須加cascade關鍵字。

alter table tb_name

drop constraint primary key cascade;

刪除約束時,默認將同時刪除約束所對應的索引,若是要保留索引,用KEEP INDEX關鍵字。

alter table tb_name

drop primary key keep index;

重命名約束

alter table tb_name

rename constraint 約束名1 to 約束名2;

可用於將某些當初未命名而被Oracle自動命名的約束改名爲本身想要的約束名。

禁用約束

alter table tb_name

disable constraint 約束名;

在禁用主鍵時,若是沒有cascade關鍵字可能會形成外鍵的引用不一致性而出錯,此時應該使用CASCADE子句DISABLE主鍵,這樣能夠將該主鍵與相關外鍵一塊兒DISABLE掉。

alter table tb_name

disable primary key cascade;

例如在數據庫系統中大規模裝入數據時,爲了系統的效率不得不犧牲數據的一致性來關閉一些約束,甚至刪除一些約束將主表主鍵禁止的同時,也將禁止依賴於此主鍵的外鍵禁止。

使用禁用約束時會刪除索引(主鍵+惟一),而啓用約束時會重建索引,這對於大表開銷極大。因此,能夠在禁用約束時不刪除索引,使用關鍵字keep,如:

alter table tb_name

disable constraint 約束名 keep index;

在刪除約束時,可使用關鍵字validate驗證現有數據是否符合約束條件。須要注意的是以後不能對該表進行DML操做,如:

alter table tb_name

disable validate constraint 約束名;.

也可使用關鍵字novalidate不驗證現有數據(默認,省略即爲不驗證),如:

alter table tb_name

disable novalidate constraint 約束名;

啓用約束

alter table tb_name

enable constraint 約束名;

若是關閉主鍵約束時使用了CASCADE,此時使用ENABLE不會將主鍵約束與外鍵約束同時打開,只能先對主鍵約束,後對外鍵約束使用ENABLE CONSTRAINT 子句打開。

啓用約束時能夠設置是否驗證現有數據,在enable後添加關鍵字novalidate則不驗證現有數據,validate則驗證現有數據(默認,省略即爲驗證)。如:

alter table tb_name

enable novalidate constraint 約束名;

約束延遲

約束延遲指在事務提交時再驗證,默認爲不延遲。

開啓約束延遲:set constraint 約束名 deferred;

關閉約束延遲:set constraint 約束名 immediate;

聲明:該筆記轉載自《Oracle Database 11g SQL開發指南》,僅用於我的學習,若侵犯到您的版權敬請告知!
相關文章
相關標籤/搜索