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;

 

以上內容來自慕課網的相關教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM