我有3个表:
- 用户(id(
- 角色(id(
- user_role(id,user_id,role_id(
现在,我想设置一个外键,但我不确定CASCADE
和RESTRICT
之间有什么区别?
在user_role
基本上只是一个将用户与角色配对的透视表的情况下,我应该为on UPDATE
和on DELETE
设置什么。
提前谢谢。
由于user_role只是一个联接表,您不太可能需要ON UPDATE
,除非您打算为现有行更改username.id或roles.id(我对此表示怀疑(。
ON DELETE RESTRICT
确保引用完整性得到维护,即如果user_role中的一行或多行引用父行,则不能删除父行(即在用户或角色(。如果确实尝试删除行,MySQL将抛出错误。
(至少在MySQL的最新版本中(我确信您不需要包含ON DELETE RESTRICT
,因为如果您定义了外键,MySQL在这种情况下无论如何都会抛出错误(为了保持引用完整性(。
如果您希望在删除user_role中的某行时(在用户和角色(,MySQL将其删除,请在user_role的两个外键上使用ON DELETE CASCADE
。另一种选择是在删除一个或两个父行之前手动执行(例如在代码中(。