引入
外键表示一个表中的字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。
比如学生和班级表,学生表完全依赖班级表,我们可以通过外键约束让学生表与班级表产生关联,当班级表数据变化时影响学生表。
- 父表和子表储存引擎要一致
- 使用InnoDB引擎支持外键约束
- 外键更与主表列类型一致
- 外键列使用索引(数据库会自动添加索引)
注意:很多项目不使用外键。
处理动作
ON DELETE
选项 |
说明 |
ON DELETE CASCADE |
删除父表记录时,子表记录同时删除 |
ON DELETE SET NULL |
删除父表记录时,子表记录设置为NULL(子表字段要允许NULL) |
ON DELETE NO ACTION |
删除父表记录时,子表不做任何处理 |
ON DELETE RESTRICT |
必须把子表处理完才可以删除主表 |
ON UPDATE
选项 |
说明 |
ON UPDATE CASCADE |
更新父表记录时,比如更改主表的主键时,子表记录同时更新 |
ON UPDATE SET NULL |
更新父表记录时,比如更改主表的主键时,子表记录设置为NULL |
ON UPDATE NO ACTION |
更新父表记录时,子表不做任何处理 |
ON UPDATE RESTRICT |
必须把子表处理完才可以更新主表 |