Table Constraint

Table Constraint

1. Keys

  • Primary Key: 限制該欄位每筆資料皆為 Unique, 且該欄位不可為 Null
  • Unique Key: 限制該欄位每筆資料皆為 Unique, 可將該欄位設定為 Null or Not Null
  • Foreign Key: 限制該欄位與其它 Table 的 PK 資料連結, 可設定 On Delete 條件
    • On delete 有三種條件, 分別為 No action, Cascade 和 Set Null
      • No action: 不允許單一 Table 進行新增, 修改或刪除, 若需要新增必須在 Table(PK) 中先行建立該筆資料, 才能在其它 Table(FK) 中新增資料; 若需要修改或刪除必須將全部與 Table(PK) 有所關連的 Table(FK) 一起進行修改或刪除即可
      • Cascade: 刪除 Table(PK) 中的某筆資料時, 系統會將所有 Table(FK) 中的該筆欄位資料也一併被刪除
      • Set Null: 刪除 Table(PK) 中的某筆資料時, 系統會將所有 Table(FK) 中的該筆欄位資料設定為 Null

image

2. Deferrable 與 Deferred

  • Deferrable(此功能好像只是用來卡 Deferred 可否被 Enable 所用):
    • Enable(勾選)為 Deferrable, Disable(不勾選)為 Not Deferrable, 預設為 Not Deferrable
    • 不論 Deferrable 是否 Enable, 只要 Deferred Disable, Data 在更新至 Temporary Table(臨時表)時就會立即驗證是否符合各種限制(Ex: PK, FK, Check等)
  • Deferred:
    • Enable(勾選)為 Deferred, Disable(不勾選)為 Immediate, 預設為 Immediate, 只有在 Deferrable 為 Enable 狀態, Deferred 才可被 Enable
    • 當 Deferred Enable 時, Data 在 更新至 Temporary Table(臨時表)時還不會驗證 Data, 直到 Commit 時才會驗證, 而 Deferred 狀態為 Immediate 時, 顧名思義當 Data 在 更新至 Temporary Table 時立即驗證

3. Checks

image

  • Checks 中可以設定各個欄位資料的限制, Ex: 在 Condition 中增加 Col_A >= 10 AND Col_A <> 15, 那麼嘗試塞入 Col_A 中的資料不符合 Condition 時會報錯

P.S 不等於"<>"可以用"!="取代