1. 程式人生 > >Oracle進階三(約束)

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只能是列級約束//先設定列,等列都設定好了,再新增約束。