在慕課網上學習時記的關於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;
以上內容來自慕課網的相關教程