mysql外键

160 阅读1分钟
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