alter table tb_name數據庫
modity column_name constraint nt_name not null;學習
須要注意的是,添加NOT NULL約束並不使得add constraint語句,而是使用modify。索引
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
alter table tb_nametable
add constraint uk_name primary key (column_name);效率
alter table tb_namedate
add constraint ck_name check (column_condition);
通常狀況下,在添加一個約束時,表中現有的全部行都必須知足這個約束條件。然而,若是在最初添加約束時能夠禁用約束並能夠經過指定ENABLE NOVALIDATE選項來讓約束只適用於新添加的數據。
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;