oracle 註釋和約束
註釋
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle約束Oracle
- oracle 約束Oracle
- Oracle定義約束 外來鍵約束Oracle
- oracle中的約束Oracle
- oracle 約束詳解Oracle
- Oracle約束簡介Oracle
- oracle鍵約束控制Oracle
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 新增/刪除約束(Oracle)Oracle
- oracle的延遲約束Oracle
- Oracle 11g系列:約束Oracle
- 修改oracle的約束欄位Oracle
- 支援向量機(SVM)的約束和無約束優化、理論和實現優化
- 約束和異常處理
- Sql Server系列:鍵和約束SQLServer
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- oracle約束學習經典案例Oracle
- oracle 約束的novalidate 應用Oracle
- oracle 約束 enable validate 檢查Oracle
- oracle外來鍵約束的總結Oracle
- Oracle constraints type 約束型別OracleAI型別
- Oracle基礎 11 約束 constraintsOracleAI
- oracle主外來鍵鎖_lock_約束Oracle
- Oracle約束的學習與測試Oracle
- Oracle 9i 約束條件(轉)Oracle
- SQL約束SQL
- 綜合約束
- Oracle中檢視所有表和欄位以及表註釋.欄位註釋Oracle
- oracle 新增註釋Oracle
- JavaScript註釋:單行註釋和多行註釋詳解JavaScript
- Oracle如何管理帶約束的B樹索引Oracle索引
- oracle 表遷移方法 (二) 約束不失效Oracle
- Oracle唯一約束中NULL的處理OracleNull
- MySQL中的 UNIQUE約束和UNIQUE索引MySql索引
- Oracle-給表增加欄位和註釋Oracle
- 約束介紹
- oracle 使用sql查詢表註釋和列註釋及資料型別等OracleSQL資料型別
- 註解和註釋區別