參照完整性

SQL 關聯式資料庫入門

Timo Grossenbacher

Data Journalist

參照完整性

  • 參照其他資料表的紀錄,必須指向該表中已存在的紀錄
  • 在兩個資料表之間定義
  • 透過外鍵強制執行
SQL 關聯式資料庫入門

參照完整性違規

從資料表 A 到資料表 B 的參照完整性會被破壞,當……

  • ……若在 A 的某筆紀錄所參照的 B 紀錄被刪除。
  • ……若在 A 新增一筆參照 B 中不存在紀錄的資料。
  • 外鍵可防止這些違規!
SQL 關聯式資料庫入門

處理違規

CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE NO ACTION
);
CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE CASCADE
);
SQL 關聯式資料庫入門

處理違規(續)

ON DELETE…

  • …NO ACTION:丟出錯誤
  • …CASCADE:刪除所有參照該紀錄者
  • …RESTRICT:丟出錯誤
  • …SET NULL:將參照欄位設為 NULL
  • …SET DEFAULT:將參照欄位設為其預設值
SQL 關聯式資料庫入門

來看幾個範例!

SQL 關聯式資料庫入門

Preparing Video For Download...