CREATE TABLE a(
id INT PRIMARY KEY,
name VARCHAR(20)
)
CREATE TABLE b(
id INT PRIMARY KEY,
aid INT,
FOREIGN KEY (aid) REFERENCES a(id)
)
创建表a(父表),表b(子表),其中aid是表b的外键,参照表a的id,id必须为a的主键或唯一约束。
子表的外键是父表的主键,子表参照父表,子表的值必须已存在于父表中,父表可以有子表中不存在的值。
更新/删除子表的值,不影响父表。前提是子表可以更新,即在父表值范围内更新,否则子表更新失败。
更新/删除父表的值,如果子表中不存在对应的值,则可以正常更新/删除父表;如果子表中存在对应的值,则会根据具体策略,操作父/子表:
- CASCADE:更新/删除父表时,同时更新/删除父子表对应的值
- SET NULL:更新/删除父表时,将子表对应的值设置为空
- RESTRICT/NO ACTION:拒绝更新/删除父表,也不影响子表
默认策略是RESTRICT
在创建表时设置策略:
CREATE TABLE b(
id INT PRIMARY KEY,
aid INT,
FOREIGN KEY (aid)
REFERENCES a(id)
ON UPDATE CASCADE
ON DELETE RESTRICT
)
创建表后添加外键:
ALTER TABLE b
ADD FOREIGN KEY (aid)
REFERENCES a(id)
ON UPDATE CASCADE
ON DELETE RESTRICT