新增/刪除約束(Oracle)

guyuanli發表於2011-07-06
增加一列或者多列 alter table 表名 add(column_name datatype[,..]); 修改一列或者多列(修改列的型別或者是長度) alter table 表名 modify(column_name datatype[,..]); 刪除一列 alter table 表名 drop column column_name; 刪除多列 alter table 表名 drop(column_name[,..])[@more@]建表階段新增約束(欄位級|表級) 非空約束(not null) 1)確保其所在欄位值不能為空 2)非空約束只能定義為欄位級別 基本語法:column_name datatype not null 唯一約束(unique) 1)確保其所在欄位值不能重複 2)允許空值 3)既可以定義為欄位級別也可以定義到表級別 4)可以在一個欄位上建立唯一約束 (此欄位值不能重複,既可以是表級別也可以是欄位級別), 也可以在幾個欄位上建立唯一約束(這幾個欄位的組合值不能重複,只能是表級別的) 5)Oracle會自動為建立唯一約束的欄位建立索引 欄位級別:column_name datatype unique 表級別: constraint uni_name unique(column_name[,..])自定義約束名 或者 unique(column_name[,..]) 系統自動分配約束名 刪除約束:alter table 表名 drop constraint 約束名; 主鍵約束(primary key) 1)確保所在欄位值非空且唯一 2)一個表最多隻允許一個主鍵,當然這個主鍵可以基於一個欄位也可以基於多個欄位 3)非聯合主鍵既可以是欄位級別的也可以是表級別的,聯合主鍵只能是表級別的 4)oracle會自動為其建立索引 欄位級別:column_name datatype primary key 表級別: constraint p_k primary key(column_name[,..])自定義約束名 或者 primary key(column_name[,..])系統自動分配約束名 一般情況下我們選擇透過序列讓系統去幫我們確保不違反主鍵約束 create table 表名(column_name datatype primary key,column_name2 datatype[,..]); create sequence 序列名; insert into 表名 values(序列名.nextval,值[,..]) 刪除主鍵: alter table 表名 drop constraint 約束名; 或者 alter table 表名 drop primary key; 外來鍵約束(foreign Key) 1)確保所在欄位的值與另一個表中的欄位值有一定的關聯關係 2)既可以定義為欄位級別也可以定義為表級別 3)被外來鍵關聯上的另一個表的欄位必須唯一(即此欄位必須是 unique或者primary key) 欄位級別:column_name datatype reference 父表名(欄位名) 表級別: constraint f_k foreign key(column_name) references 父表名(欄位名) --自定義約束名 或者 foreign key(column_name) references 父表名(欄位名) --系統自動分配約束名 刪除父表(主表): 方式一:先刪除子表或者只刪除子表的外來鍵約束 然後使用drop table 表名刪父表 方式二:drop table 父表名 cascade constraints; 檢查約束(check) 1)確保所在欄位的值在check所給的範圍裡面 2)既可以定義為欄位級別也可以定義為表級別 欄位級別:column_name datatype check(值1,值2) 表級別:constraint c_k check(條件)--自定義約束名 或者check(條件)--系統自動分配約束名 建完表後新增約束 alter table 表名 add constraint 約束名 unique(column_name[,..])--自定義約束名 alter table 表名 add unique(column_name[,..]);--系統自動分配約束名 主鍵約束、外來鍵約束、檢查約束的新增形如唯一約束 非空約束的新增 alter table 表名 modify(column_name not null); 禁用約束: alter table 表名 disable constraint 約束名; 啟用約束 alter table 表名 enable constraint 約束名;

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

相關文章