第二十回:外交盟约

—— FOREIGN KEY (外键)
👈 上一回:唯我独尊 🏠 回到大竹峰 下一卷:移形换影 👉

我的 Disciples 表里有个 Weapon_ID 列,但我怎么保证填进去的 ID 真的对应一把存在的法宝呢?

这便需要 FOREIGN KEY (外键)。它是一条无形的锁链,将两个表连接起来,保证数据的完整性。

🤝 盟约之誓:FOREIGN KEY

📜 结盟心法

FOREIGN KEY 是一个表中的字段,它指向另一个表中的 PRIMARY KEY

外键约束能防止非法数据插入外键列,因为它必须是父表中存在的值。

🧘‍♂️ 试炼:缔结盟约

先有 Weapons (父表):

CREATE TABLE Weapons ( W_ID int PRIMARY KEY, WeaponName varchar(255) );

再建 Disciples (子表),并加上外键约束:

CREATE TABLE Disciples ( ID int PRIMARY KEY, Name varchar(255), Weapon_ID int, FOREIGN KEY (Weapon_ID) REFERENCES Weapons(W_ID) );

如果我试图删掉 Weapons 表里的“噬魂棒”,而张小凡手里正拿着它,会发生什么?

天道(数据库)会阻止你!这叫引用完整性保护。除非... 你签了“生死状”。

📜 生死契约 (级联操作)

在建立外键时,你可以规定“当父表数据被删除/更新”时,子表该如何反应:

1. ON DELETE CASCADE (连坐)

FOREIGN KEY (Weapon_ID) REFERENCES Weapons(W_ID) ON DELETE CASCADE

后果: 噬魂棒毁,张小凡亡。如果删除法宝,持有该法宝的弟子也会被自动删除!慎用!

2. ON DELETE SET NULL (弃暗投明)

FOREIGN KEY (Weapon_ID) REFERENCES Weapons(W_ID) ON DELETE SET NULL

后果: 噬魂棒毁,张小凡活着,但手里空了(Weapon_ID 变为 NULL)。