Oracle constraints type 約束型別
一、維護資料的完整性
概述:資料的完整性用於確保資料庫資料遵從一定的商業和邏輯規則。在Oracle中,資料完整性可以使用約束、觸發器、應用程式(過程、函式)三種方法來實現,在這三種方法中,因為約束易於維護,並且具有最好的效能,所以作為維護資料完整性的首選。
1、約束
約束用於確保資料庫資料滿足特定的商業規則。在Oracle中,約束包括:not null、unique、primary key, foreign key和check五種。
A、not null(非空)
如果在列上定義了not null,那麼當插入資料時,必須為列提供資料。
B、unique(唯一)
當定義了唯一約束後,該列值是不能重複的,但是可以為null。
C、primary key(主鍵)
用於唯一的標識錶行的資料,當定義主鍵約束後,該列不但不能重複而且不能為NULL。一張表最多隻能有一個主鍵,但是可以由多個unique約束。
D、foreign key(外來鍵)
用於定義主表和從表之間的關係,外來鍵約束要定義在從表上,主要則必須具有主鍵約束或是unique約束,當定義外來鍵約束後,要求外來鍵列資料必須在主表的主鍵列存在或是為NULL。
E、check
用於強制行資料必須滿足的條件,假定在sal列上定義了check約束,並要求sal列值在1000~2000之間,如果不在1000~2000之間就會提示出錯。
綜合案例:
商品售貨系統表設計案例
現在有一個商店的資料庫,記錄客戶及其購物情況,由下面三個表組成:
商品表Goods(商品號GoodsId,商品名GoodName,單價UnitPrice,商品類別Categroy,供應商Provider)
客戶表Customers(客戶號CustomerId,姓名Name,住址Address,電郵Email,性別Gender,身份證CardId)
銷售表Purchases(客戶號CustomerId,商品號GoodsId,購買數量Num)
請用SQL語言完成下列功能:
建表,在定義中要求宣告:
(1)每個表的主外來鍵。
(2)客戶的姓名不能為空值。
(3)單價必須大於0,購買數量必須在1~30之間。
(4)電郵不能夠重複。
(5)客戶的性別必須是男或女,預設是男。
sql>create table Goods(
GoodsId char(8) primary key ,--主鍵
GoodName varchar2(50),
UnitPrice number(10,2) check(UnitPrice>0),--單價必須大於0
Category varchar(30),
Provider varchar(100));
sql>create table Customers(
CustomerId char(8) primary key,
Name varchar2(30) not null, --姓名不能為空
Address varchar2(150),
Email varchar2(100) unique,--必須唯一
Gender char(2) default('男') check(Gender in('男','女')),
CardId char(18));
sql>create table Purchases(
CustomerId char(8) references Customers(CustomerId), --外來鍵
GoodsId char(8) references Goods(GoodsId),
Num number(10) check(Num between 1 and 30)));
2、新增約束
如果在建表時忘記建立必要的約束,則可以在建表後使用alter table命令為表增加約束,但是要注意:增加not null約束時,需要使用modify選項,而增加其他四種約束使用add選項。
(1)增加商品名也不能為空
sql>alter table Goods modify GoodsId not null;
(2)增加身份證也不能重複
sql>alter table Customers add constraint UQ_CardId unique(CardId);
(3)增加客戶的住址只能是海淀、朝陽、東城、西域
sql>alter table Customers add constraint CK_Address check(Address in ('海淀','朝陽','東城','西域'));
3、刪除約束
當不再需要某個約束時,可以刪除。
sql>alter table 表名 drop constraint 約束名稱;
特別說明:
在刪除主鍵約束的時候,可能有錯誤。比如
sql> alter table 表名 drop primary key;
這是因為如果在兩表存在主從關係,那麼在刪除主表主鍵約束時,必須帶上cascade選項。
sql> alter table 表名 drop primary key cascade;
4、顯示約束資訊
A、顯示約束資訊
透過查詢資料字典檢視user_constraints,可以顯示當前使用者所有的約束的資訊。
sql>select constraint_name,constraint_type,status,validated from user_constraints where table_name='Goods';
B、顯示列約束
透過查詢資料字典檢視user_cons_column,可以顯示約束所對應的表列資訊。
sql>select column_name,position from user_cons_columns where constraint_name='CK_Address';
6、表級定義和列級定義
A、表級定義
表級定義是指在定義了所有列後,再定義約束,這裡需要注意,not null約束只能在列級上定義。
案例:
sql> create table Goods(
GoodsId char(8),GoodsName varchar2(50), Category varchar(30),
constraint PK_GoodsId primary key(GoodsId));
B、列級定義
列級定義是在定義列的同時定義約束。
案例:
sql>create table Goods(
GoodsId char(8) constraint PK_GoodsId primary key ,--主鍵
GoodName varchar2(50),
UnitPrice number(10,2) check(UnitPrice>0),--單價必須大於0
Category varchar(30),
Provider varchar(100));
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2131826/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 完整性約束的型別(Types of Integrity Constraints)型別AI
- Oracle基礎 11 約束 constraintsOracleAI
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- PHP7型別約束PHP型別
- SQL教程——常見的約束型別SQL型別
- PHP中的型別約束介紹PHP型別
- odoo 開發入門教程系列-約束(Constraints)OdooAI
- 外來鍵約束drop table cascade constraintsAI
- Oracle約束Oracle
- oracle 約束Oracle
- oracle patch補丁型別typeOracle型別
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- Oracle定義約束 外來鍵約束Oracle
- TreeSet的null值與元素型別的約束Null型別
- 32. 基本資料型別、約束條件資料型別
- C#泛型約束C#泛型
- 泛型的約束理解泛型
- Go 泛型之泛型約束Go泛型
- XML Schema 字串資料型別及約束詳解XML字串資料型別
- oracle中的約束Oracle
- oracle 約束詳解Oracle
- Oracle約束簡介Oracle
- oracle鍵約束控制Oracle
- Java泛型(三):型別擦除帶來的約束與侷限性Java泛型型別
- TypeScript type 型別別名TypeScript型別
- C# 泛型 介面約束C#泛型
- zt_oracle lock type鎖型別詳解Oracle型別
- 【MySQL】MySQL基礎(SQL語句、約束、資料型別)MySql資料型別
- MySQL——表的約束,資料型別,增刪查改MySql資料型別
- 資料庫中欄位資料型別以及約束資料庫資料型別
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- [譯]Kotlin泛型中何時該用型別形參約束?Kotlin泛型型別
- oracle 註釋和約束Oracle
- 新增/刪除約束(Oracle)Oracle
- oracle的延遲約束Oracle
- oracle taf type型別為session和select的區別Oracle型別Session
- C# 泛型 基類約束C#泛型