如果"on delete"设置为级联,我应该为 mysql 中的外键设置什么"on update"?



我有3个表:

  • 用户(id(
  • 角色(id(
  • user_role(id,user_id,role_id(

现在,我想设置一个外键,但我不确定CASCADERESTRICT之间有什么区别?

user_role基本上只是一个将用户与角色配对的透视表的情况下,我应该为on UPDATEon DELETE设置什么。

提前谢谢。

由于user_role只是一个联接表,您不太可能需要ON UPDATE,除非您打算为现有行更改username.idroles.id(我对此表示怀疑(。

ON DELETE RESTRICT确保引用完整性得到维护,即如果user_role中的一行或多行引用父行,则不能删除父行(即在用户角色(。如果确实尝试删除行,MySQL将抛出错误。

(至少在MySQL的最新版本中(我确信您不需要包含ON DELETE RESTRICT,因为如果您定义了外键,MySQL在这种情况下无论如何都会抛出错误(为了保持引用完整性(。

如果您希望在删除user_role中的某行时(在用户角色(,MySQL将其删除,请在user_role的两个外键上使用ON DELETE CASCADE。另一种选择是在删除一个或两个父行之前手动执行(例如在代码中(。

最新更新