Foreign Key
外鍵
01你是不是遇到這個 / THE SYMPTOM
我有訂單表跟使用者表,訂單裡存了使用者 id。但我發現有些訂單指到的使用者根本不存在(可能被刪掉了),變成孤兒資料。我想讓資料庫自己擋掉「指到不存在的對象」這種髒資料。
↑ 如果你點頭了,你要的關鍵字就是 Foreign Key。
02這是什麼 / DEFINITION
外鍵是讓一張表的某欄位「指向」另一張表主鍵的約束,由資料庫強制保證關聯的有效性:你不能插入指向不存在對象的列,也能設定當被指向的列被刪除時要怎麼處理(連帶刪除或禁止刪除)。
03什麼時候用 / WHEN TO USE
當兩張表有「從屬/歸屬」關係、且你想靠資料庫本身保證關聯一定有效(不靠應用程式自律)時。例如訂單必須屬於某個存在的使用者、留言必須屬於某篇存在的文章。
04怎麼跟 AI 說 / HOW TO ASK
直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:
在 orders 表的 user_id 欄位加一個 foreign key(外鍵)指向 users 表的 id,並設定 ON DELETE CASCADE,當使用者被刪除時連帶刪掉他的訂單。
05常見坑 / WATCH OUT
⚠ ON DELETE 的行為要想清楚:CASCADE 會連帶刪除(可能誤刪一大串)、RESTRICT 會禁止刪除、SET NULL 會把關聯欄位清空,選錯後果差很多。另外外鍵會在寫入時做檢查、略增成本,且部分資料庫(如 MySQL MyISAM、某些雲端 SQLite 設定)預設不強制外鍵,要確認有沒有真的開啟。
06相關的詞 / RELATED