1. 程式人生 > >Oracle數據庫(十)—— 約束

Oracle數據庫(十)—— 約束

set null 當前 單獨 sys ade 如果 關鍵字 not null 數據字典

(一)什麽是約束

約束是表級的強制規定

有以下五種約束

  • NOT NULL :非空
  • UNIQUE:唯一
  • PRIMARY KEY:主鍵
  • FOREIGN KEY:外鍵
  • CHECK:檢查

註意約束

  • 如果不指定約束名 ,Oracle server 自動按照 SYS_Cn 的格式指定約束名
  • 創建和修改約束:
  1. 建表的同時
  2. 建表之後
  • 可以在表級或列級定義約束
  • 可以通過數據字典視圖查看約束

(二)表級約束和列級約束

  • 作用範圍:
  •   ①列級約束只能作用在一個列上
  •   ②表級約束可以作用在多個列上(當然表級約束也 可以作用在一個列上)
  • 定義方式:列約束必須跟在列的定義後面,表約束不與列一起,而是單獨定義。
  • 非空(not null) 約束只能定義在列上

約束定義語法:

CREATE TABLE [schema.]table (

  column datatype [DEFAULT expr] [column_constraint],

  ...

   [table_constraint]

  [,...]);

(三)創建約束定義

1、not null約束

技術分享圖片

定義非空約束後,賦值為null會報錯

技術分享圖片

2、unique約束

可以定義在表級或列級

技術分享圖片

定義該約束的列不允許出現重復值

技術分享圖片

3、primary key約束

可以定義在表級或列級

技術分享圖片

主鍵特點:非空且唯一 即primary key = not null + unique

技術分享圖片

4、foreign key約束

可以定義在表級或列級

技術分享圖片

增加數據時,外鍵約束的列的值必須在父表中有值

技術分享圖片

FOREIGN KEY 約束的關鍵字

  • FOREIGN KEY: 在表級指定子表中的列
  • REFERENCES: 標示在父表中的列
  • ON DELETE CASCADE(級聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除
  • ON DELETE SET NULL(級聯置空): 子表中相應的列置空

5、check約束

定義每一行必須滿足的條件

技術分享圖片

技術分享圖片

(四)添加約束

使用 ALTER TABLE 語句:

  • 添加或刪除約束,但是不能修改約束
  • 有效化或無效化約束
  • 添加 NOT NULL 約束要使用 MODIFY 語句

1、添加刪除約束

-- 在工資上添加一個非空約束

技術分享圖片

-- 刪除name的非空約束

技術分享圖片

-- 給name添加unique約束

技術分享圖片

2、無效化約束

技術分享圖片

3、激活約束

技術分享圖片

  • ENABLE 子句可將當前無效的約束激活
  • 當定義或激活UNIQUE 或 PRIMARY KEY 約束時系統會自動創建UNIQUE 或 PRIMARY KEY索引

4、查詢約束(了解)

-- 查詢EMPLOYEES表中的約束信息

技術分享圖片

5、查詢定義約束的列

-- 查詢EMPLOYEES表中定義約束的列

技術分享圖片

(五)總結

1、創建和修改約束

2、描述約束的類型:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK

Oracle數據庫(十)—— 約束