oracle 註釋和約束

yesye發表於2021-09-09

註釋

oracle中可以對錶,行中新增註釋

使用comment on 語句

例如  對錶新增註釋

comment on table emp is ‘公司僱員表’   〉〉對EMP表新增註釋

對行新增註釋

comment on column emp.deptno is ‘部門編號’

查詢註釋

根據資料字典查詢

select * from user_tab_comments where tablename=’emp’; 資料字典user_tab_comments  表註釋

select * from user_col_comments where tablename=’emp’; 資料字典user_col_comments   行註釋

 

約束

約束來源於資料完整性

資料完整性是用於確保資料遵從一定的商業和邏輯規則

那麼確保資料完整性的方式有,約束,觸發器,應用程式(過程,函式)三種方法。

約束就是其中之一,並且是三種方法中最易於維護的,並且有著很好的效能,是確保資料完整性方法中的首選。

 

約束的作用

約束用於確保資料庫資料滿足特定的商業規則

oracle資料庫中包括5種約束 

not null;    非空   當為該列插入資料時,不能為空值

unique;   唯一          該列資料的值必須是唯一的,但是可以為空

primary key; 主鍵     不能重複,不能為空   not null+unique  並且每一張表中只能有一個主鍵,可以有多列成為一個主鍵,但不能有多個主鍵。

foreign key; 外來鍵     用於定義主表和從表的關聯,定義在從表上。定義時,要求主表的列必須是主鍵或者有unique約束。並且,定義外來鍵約束後,從表的列的資料必須與主表的相同,或者為空。

check; 檢查  看插入的資料是否符合設定的檢查約束,如果不符合,則報錯。

案例  

商店售貨系統表設計案例

現有一個商店的資料庫,記錄客戶及購物情況,由下面三個表組成

商品goods表(商品號goodsid,商品名goodsname,單價unitprice,商品類別category,供應商provider);

客戶customer表(客戶號customerid,姓名name,住址address,電子郵件email,性別sex,身份證cardid);

購買purchase表(客戶號customerid,商品號goodsid,購買數量nums);

要求:

每個表有主鍵,外來鍵

客戶姓名不能為空

單價必須大於0,購買數量必須在1到30之間

電子郵件不能重複

客戶的性別必須是 男或者女,預設為男。

(案例取自韓順平老師玩轉oracle課程中)

分析:

一般以編號做為表的主鍵,商品號和客戶號一般為固定長度,使用型別為char,在商品表和購買表中,可以使商品表為主表,購買表為從表,商品號為外來鍵列。

p_w_picpath 第一張表的建立

p_w_picpath 第二張表的構建

p_w_picpath 第三張表的建立

注意:  外來鍵格式為 constraint 約束名 foreign key(列) references 表名(列)  如果建立只是針對一列建立外來鍵,則省去foreign key ,直接輸入references即可。

商品編號一般為固定長度,則使用char型別,而不是用varchar2型別。

建立外來鍵約束時,可以在後面繼續輸入 on delete cascade 將兩列關聯起來,當刪除主表內容時,從表內容也會刪除。

如果在建立的時候出現了忘記設定一些約束,也可以在新增

注意:增加 Not null約束,需要使用modify,而增加其他四種約束,使用add選項。

案例:

在上述案例中新增新的要求

1 增加商品名也不能為空

2. 增加身份證也不能重複

3. 增加客戶的住址只能是‘海淀’,‘朝陽’,‘東城’,‘西城’,‘通州’,‘崇文’。

p_w_picpath 需求一

p_w_picpath 需求二

 

 

 

 

 

p_w_picpath 需求三

如果不但需要插入新的約束,還要插入新的列

p_w_picpath

語法為   alter table 表名 add 新列名 型別 約束

使約束失效

alter table 表名 disable constraint 約束名

使約束生效

alter table 表名 enable constraint 約束名

檢視約束

資料字典  user_constraints  顯示約束列  user_cons_columns

刪除約束

alter table 表名 drop constraint 約束名稱

注意:如果刪除主鍵,同時這是一張作為外來鍵的主表的主鍵,那麼刪除需要在約束名後加cascade;

alter table 表名 drop primary key cascade;

例,刪除表goods的主鍵

p_w_picpath

注意:在建立表設定約束時,沒有設定約束的名稱,系統會自動設定其約束的名稱,我們可以根據檢視資料字典來獲取相應約束的名稱,用來刪除約束使用。

 

表級定義和列級定義

列級定義  在建立列的同時建立約束

表級定義  在定義完列之後,再定義約束。但Not Null  只能在列級上定義

例如

列級定義為  create table 表名(列 型別 約束);

而表級定義為 create table 表名(列 型別) constraint 約束名 約束

©著作權歸作者所有:來自51CTO部落格作者鄭偉的原創作品,如需轉載,請註明出處,否則將追究法律責任

oracle職場字典『ORACLE』


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2041/viewspace-2821361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章