跟我一起學Oracle 11g【6】----Oracle中表的約束(二)


前言

在上一個章節中,說了一些表的基本操作,現在今天我們來看看表中一些特別有用的東東。在我們項目開發中,為了防止用戶向表中添加不符合語義的數據,比如一個時間字段,你肯定不能往里面填非時間字段的數值。這里就會用到我們今天講的的完整性約束咯。

完整性約束指的是數據庫中數據的正確性和相容性。主要指下面的:

  • 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,因為和前面一張內容一樣,所以不再說明了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM