编辑: 我想补充一点,IMO,使用外键支持 ON DELETE 或 ON UPDATE CASCADE 并不一定是一件好事。在实践中,我发现应该根据数据的关系仔细考虑级联删除——例如,您是否有一个自然的父子关系,这可能是可以的,或者相关的表是一组查找值。使用级联更新意味着允许修改一个表的主键。在这种情况下,我有一个普遍的哲学上的不同意见,即表的主键不应该改变。键应该是固有的常量。
它们非常重要,因为您的应用程序不是在数据库中操作数据的唯一方式。你的应用程序可以诚实地处理参照完整性,但只需要一个有权限的笨蛋出现,在数据库级别发出插入、删除或更新命令,你的应用程序参照完整性执行就会被绕过。把 FK 约束放在数据库级别意味着,除非这个笨蛋选择在发出命令之前禁用 FK 约束,否则 FK 约束将导致一个错误的插入/更新/删除语句失败,并出现参照完整性冲突。