前言
在上一個章節中,說了一些表的基本操作,現在今天我們來看看表中一些特別有用的東東。在我們項目開發中,為了防止用戶向表中添加不符合語義的數據,比如一個時間字段,你肯定不能往里面填非時間字段的數值。這里就會用到我們今天講的的完整性約束咯。
完整性約束指的是數據庫中數據的正確性和相容性。主要指下面的:
- primary key 主鍵
- foreign key 外鍵
- unique 唯一
- not null 非空
- check 檢查約束
在Oracle中,使用constraint(英文的意思就是約束)關鍵字 為約束命名。如果用戶沒有命名,那么系統會自動會用戶創建的約束命名。
OK,那我們接着就詳細講講這些。
一。Not null 約束
從字面很好理解,就是非空約束,表示某些列的值不可缺少的,在插入數據的時候,如果沒有為它賦值,那么會提示錯誤。
1.1 創建表的時候使用not null 約束
這個很簡單,我們在先前的實例中就有很多這樣的例子,如下表:
不在細說。
1.2在已經創建的表中添加not null 約束
語法如下:
alter table 表名 modify 列名 not null
很好理解,如下:
1.3not null錯誤重現
1.4刪除表中的not null 約束
語法如下:
alter table 表名 modify 列名 null
二。primary key 約束(主鍵約束)
主鍵約束在表中定義一個主鍵來唯一確定表中每一行數據的標識符。
NOTE:一個表中 只能定義一個primary key 約束(注意,但是可以有多個字段為primary key)。
Oracle 會主動的為具有primary key約束的列建立一個唯一索引。
2.1 建表時創建primary key 約束
2.2 添加primary key約束
語法:
alter table 表名 add constraint 自定義約束名 primary key(列名);
2.3.匿名約束
如果是添加匿名約束,那么就不需要在上面指定constraint關鍵字了,系統會自動的創建。
2.4.刪除約束
如果你在插入數據的時候,插入了相同的值,就會報錯,如下:
刪除約束,也很簡單哦!~,可能聰明的你已經猜出咯呀。。
語法:
alter table 表名 drop constraint 約束名
三。Unique約束
按照字面的意思是說,唯一性,也很好理解,就是指該列中不能包含有重復的值。
如果想在新建了table之后,在進行添加unique的約束,和上面的一樣,語法如下:
alter table 表名 add unique(列名)
四。Check 約束
所謂的Chck約束至的是檢查性約束,使用CHECK約束時,將對輸入的每一個數據進行檢查,只有符合條件的記錄才會保存到表中。
上面我們檢查了學生表中的年齡不能小於0,如果小於0 則會報錯!。
如果想在新建了table之后,在進行添加check的約束,和上面的一樣,語法如下:
alter table 表名 add constraint 約束名 check(列名+條件)
如果要刪除check約束,也很簡單哦,只需要如下操作:
alter table 表名 drop constraint 約束名
五。Foreign key約束
指的是外鍵約束,外鍵指的是引用另外一個表中的某一列或幾列的值。
5.1外鍵特點
1.囚為某列定義了foreign key約束,則該列的取值只能是引用表的值或者是null
2.可以在一個表中為多個列設置foreign key
3.定義了foreign key時,與被引用的主鍵列可以是在同一個表,這個叫“自引用”
5.2 創建外鍵
OK,一個學生表myStudent和一個班級表,學生表中的一個字段所在班級,外鍵到班級表中的班級編號!。
創建一個班級:
創建一個學生表:
OK,上面的外鍵約束就創建好了。
現在如果向myStudent表插入數據,如果studentClass的值在class中沒有是會報錯的。
如果想在新建了table之后,在進行添加foreign key的約束,和上面的一樣,語法如下:
alter table 表名 add constraint 約束名 foreign key(列名) referenc 表名(列名)
5.3刪除
我們在前面一節說過,因為有主外鍵關系,所以如果刪除一個有外鍵的表,會報錯。那如果,你一定要刪除的話,也可以,需要加下面的參數:
使用cascade,因為和前面一張內容一樣,所以不再說明了。