SQL查詢--約束

在慕課網上學習時記的關於oracle中約束概念的基礎筆記,當初一直對約束的概念不清不楚的,因此找了些資料來看
 
約束是數據庫用來確保數據知足業務規則的手段
約束的做用:定義規則、確保完整性
 
1.非空約束
非空約束做用的列也叫強制列。顧名思義,強制鍵列中必須有值
 
建立表時設置非空約束
create table table_name (
column_name datatype not null,
...
)
以下

 

修改表時添加非空約束
alter table table_name modify column_name datatype not null;
注意:在設置非空約束以前,表中不該該有數據
 
修改表時去除非空約束
alter table table_name modify column_name datattype null;
 
2.主鍵約束:
確保表中每一行數據的惟一性(設置了主鍵約束的字段,要求這個字段是 非空的+惟一的)
 
因此若是一個字段被設置爲主鍵,則查看錶結構時,會發現這個字段爲非空,即 NOT NULL;
一張表只能設計一個主鍵約束,可是主鍵約束能夠由多個字段構成(聯合主鍵或複合主鍵)
 
在建立表時設置主鍵約束
方式一:
create table table_name(
column_name datatype PRIMARY KEY,...
);
以下

 

方式二:(建立聯合主鍵)
constraint constraint_name primary key(column_name1,...)

 

以下
若是忘記一個表的約束名稱了,能夠從user_constraints表中查詢全部表的約束,以下
 
在修改表時添加主鍵約束
alter table table_name add constraint constraint_name primary key(column_name1,...);
設置主鍵以前,表中這個字段最好沒有數據,若是有數據則值必須是惟一的,且不能有空值
以下

 

更改約束名稱
alter table table_name rename constraint old_name to new_name
 
刪除主鍵約束
alter table table_name disable|enable constraint constraint_name; (禁用或啓用約束)
alter table table_name drop constraint constraint_name; (經過主鍵名刪除約束)
alter table table_name drop primary key[cascade]; (由於一個表只有一個主鍵,因此也能夠直接這樣刪除主鍵;可選參數cascade用於級聯刪除,好比有外鍵的狀況)
 
3.外鍵約束:
1)在Oracle數據庫中,外鍵是用來實現參照完整性的方法之中的一個。打個形象的比喻,外鍵是指定義外鍵的表的列的值必須在另外一個表中出現。
2)被參照的表稱之爲父表(parent table),建立外鍵的表稱之爲子表(child table)。子表中的外鍵關聯了父表中的主鍵。
3)外鍵可以在建立表時定義或者經過ALTER TABLE語句建立。
 
在建立表時設置外鍵約束
 
方式一(列集)
create table table1(從表)
(
column_name datatype references table2(主表)(column_name),...
);
設置外鍵約束時,主表的字段必須是主鍵;主從表中相應的字段必須是同一個數據類型;從表中外鍵字段的值必須來自主表中相應字段的值,或者爲null
例子
先建立一個主表
create table typeinfo
(
typeid varchar2(10) primary key, 設置主鍵
typename varchar2(20)
);
接下來建立一個從表
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20),
typeid_new varchar2(10) references typeinfo(typeid)
(將 typeid_new 設爲外鍵,引用的是 typeinfo 表的主鍵)
);

 

方式二(表集)
constraint contraint_name(約束名) foreign key(column_name) references table_name(column_name) [on delete cascade]
[]中的東西表示級聯刪除,添加之後,則刪除主表的字段值,從表的外鍵也會刪除
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid_new foreign key(typeid_new) references typeinfo(typeid)
);
 
在修改表時添加外鍵約束
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20),
typeid_new varchar2(10)
);
alter table userinfo
add constraint fk_typeid_alter foreign key(typeid_new)references typeinfo(typeid);

 

刪除外鍵約束
 
(1)禁用外鍵約束
disable|enable constraint constraint_name (放到alter table 後面使用)
經過user_constraints表查看有哪些約束
select table_name,constraint_name,constraint_type,status from user_constraints where table_name='APPR_ITM_DEFINE_EX'
 
constraint_type的含義
 

 

禁用約束
alter table userinfo disable constraint fk_typeid_alter;
 
(2)刪除外鍵約束
drop constraint constraint_name;(放到alter table 後面使用)
以下:
alter table userinfo drop constraint fk_typeid_alter;
 
4.惟一約束
 
做用:保證字段值的惟一性
與主鍵約束的區別:
1.主鍵約束的主鍵字段必須是非空的,而惟一約束容許有一個空值
2.主鍵在每一張表中只能有一個,而惟一約束在每張表中能夠有多個
 
在建立表時設置惟一約束
方式一(列集)
create table table_name(column_name datatype unique,...)
 
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20) unique, 設置惟一約束
typeid_new varchar2(10)
);
 
方式二(表集)
constraint constraint_nameunique(column_name)
 
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20) ,
typeid_new varchar2(10),
constraint un_username unique(username) 設置惟一約束
);
若是要設置多個惟一約束,須要繼續添加constraint constraint_nameunique(column_name)才行,不能寫在一個constraint中
 
在修改表時添加惟一約束
 
create table userinfo
(
id varchar2(10) primary key, 設置主鍵
username varchar2(20) ,
typeid_new varchar2(10)
);
alter table userinfo add constraint un_username unique(username);
 
刪除惟一約束
 
1.禁用惟一約束
disable|enable constraint constraint_name (放到alter table 後面使用)
 
禁用約束
alter table userinfo disable constraint un_username;
 
2.刪除惟一約束
drop constraint constraint_name;(放到alter table 後面使用)
以下:
alter table userinfo drop constraint un_username;
相關文章
相關標籤/搜索