外键约束是指一个表中的字段(或字段集合)引用另一个表的主键或唯一键,用于建立和强制两个表数据之间的关联关系。

主要作用:

保证数据的一致性和完整性
防止非法数据插入外键列
实现表与表之间的关联

父表:被拿主键作为外键的表
子表:拿别的表的主键作为外键的表

当父表发生删除或更新操作时,可以指定子表的处理方式:

动作说明

RESTRICT(默认):拒绝父表的删除或更新操作
CASCADE:级联操作,父表删除/更新记录时,自动删除/更新子表中匹配的记录
SET NULL:父表删除/更新记录时,将子表中匹配记录的外键列设为NULL(列需允许NULL)
NO ACTION:与RESTRICT相同
SET DEFAULT:设为默认值(InnoDB不支持)

外键约束的注意事项

存储引擎要求:只有InnoDB引擎支持外键约束,MyISAM不支持
数据类型匹配:外键列和参照列的数据类型必须相同或兼容

索引要求:

父表的参照列必须有主键或唯一约束
子表的外键列会自动创建索引(如果不存在)

性能影响:外键约束会增加数据库的开销,可能影响写入性能
循环引用:避免两个表相互引用形成循环依赖
NULL值处理:外键列允许NULL值时,可以插入NULL而不违反约束

标签: none

评论已关闭