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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10、Oracle中的約 束constraintOracleAI
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 主鍵約束、唯一約束和唯一索引索引
- oracle外來鍵約束的總結Oracle
- Oracle comment新增註釋Oracle
- Oracle如何管理帶約束的B樹索引Oracle索引
- 支援向量機(SVM)的約束和無約束優化、理論和實現優化
- oracle 使用sql查詢表註釋和列註釋及資料型別等OracleSQL資料型別
- 約束和異常處理
- 約束
- Javaweb-約束-外來鍵約束JavaWeb
- JavaScript註釋:單行註釋和多行註釋詳解JavaScript
- 約束CONSTRAINTAI
- 03約束
- MySQL 約束MySql
- SQL約束SQL
- 註解和註釋區別
- (10)邏輯綜合新增約束(環境約束)
- 約束介紹
- 差分約束
- 綜合約束
- 《MySQL 基礎篇》八:約束和檢視MySql
- 變數 和 註釋變數
- Oracle PL/SQL程式碼中的註釋OracleSQL
- 完整性約束
- 外來鍵約束
- SQLServer約束介紹SQLServer
- IDELAY約束測試IDE
- MySQL自增約束MySql
- Javaweb-約束案例JavaWeb
- 《學習》6約束
- MySQL 欄位約束MySql
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- Maven中dependency和plugins的繼承與約束MavenPlugin繼承
- oracle的靜態註冊和動態註冊Oracle
- VsCode 新增檔案頭部註釋和函式註釋[koroFileHeader]VSCode函式Header
- 約束前端專案中的目錄和檔名前端
- IDEA自定義類註釋和方法註釋(自定義groovyScript方法實現多行引數註釋)Idea