Oracle進階三(約束)
維護資料的完整性
資料的完整性確保資料庫資料遵從一定的商業和邏輯規則。早oracle中資料的完整性可以使用約束、觸發器、應用程式(過程、函式)三種方法實現。約束效果最好
約束:
not null、unique、primary key、foreign key、check
商店表的設計:
商品goods:(goodsId、goodsName、price、category、provider);
客戶customer:(customerId,name,address,email,sex,cardId);
訂單purchase:(customerId,goodsId,numbers);
//建立商品表
create table goods(goodsId char(10) primarykey,--主鍵
goodsname varchar2(16) not null,
price number(8,2) check(price>0),
category varchar2(10),
provider varchar2(16));
//客戶表
create table customer(customerId char(8)primary key,--主鍵
name varchar2(30) not null,
address varchar2(50),
email varchar2(20) unique,
sex number(1) defulte 1 check(sex in(1,2)),--1代表男,2代表女
cardId char(18) );
//訂單表
create table puechase(customerId char(8)references custermer(customerId),--外健
goodsId char(10) referencs goods(goodsId),
numbers number(2) check (munbers between 1and 30) );
為已經建好的表增加約束
alter table命令為表增加約束(在增加not null時要是用modify選項,增加其他的四種約束使用add選項)
alter table goods modify category not null;--為category列增加not null約束
alter table customer add constraintcardunique unique(cardId);--為cardId增加unique約束
alter table customer add constraintaddresscheck check(address in(‘陝西’,’上海’,’北京’));--設定check約束
刪除約束
alter table 表名 drop constraint 約束名稱;
在刪除主鍵時,可能有錯誤(兩張表存在主從關係,那麼刪除主表的約束時,必須帶上cascade選項)
alter table 表名 drop primary keycascade;
顯示約束的資訊:
1. 通過查詢資料字典user_contraints可以顯示當前使用者的所有約束資訊
select constraint_name,constraint_type,status, validatedfrom user_contraints where table_name=’表名’
2. 顯示約束列
通過查詢資料字典user_cons_columns,可以顯示約束對應的表列資訊
select colum_name,position from user_cons_columns whereconstraint_name=’約束名’
列級定義:
在定義列的同時定義約束//在定義列緊跟著定義約束
表級定義:
在定義所有列之後,在定義約束,這裡需要注意,not null只能是列級約束//先設定列,等列都設定好了,再新增約束。