如果用户被删除,这一切都与有关。
1.如果用户被删除,并且用户有一个帖子。该线程将被删除。
2.如果用户没有帖子但有帖子,则会删除帖子。
3.如果删除了某个线程,则删除该线程上的所有帖子。
我尝试级联User-> Thread,User-> Post,Thread-> Post。但是,我得到了这个例外:Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths. Specify on delete no action.
我理解错误。如果用户被删除,则删除线程和帖子,因此当删除线程时,它将尝试级联帖子,该帖子已经被用户级联。 (这是对的吗?)
如果以上情况属实,我该如何解决?
答案 0 :(得分:1)
有一个替代解决方案,你必须在删除PK时将FK设置为null,如下所示。在关系中,有一组Table Designer
,其中Insert and Update specification
选项可以找到它Delete Rule
,将其设置为NULL。
这意味着在您的方案中,在线程表中删除用户时user_account_id列值替换为NULL
,并且在post table user_account_id
列值中替换为NULL
。当您删除任何线程时,它也会影响帖子表和列user_account_id值将替换为NULL
。
答案 1 :(得分:1)
<强>修强>
所以从下面的讨论中听起来像是: 当用户被删除时,您想要删除他的主题以及与该主题相关联的任何帖子(他或其他任何人的帖子),以及可能在其他人的帖子中的任何帖子。通过设计,这为我们提供了2个删除帖子表中的行的路径,因此,问题。
只需用Google搜索并在一个名为stackoverflow的模糊网站上找到对此确切问题的深入讨论: - )
Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths - why?
上述讨论既深入又广泛,值得一读。这不会公平,但在下面被LuFFy推动之后,我决定添加一些亮点。 1号答案的主旨基本上就是我上面已经说过的 - 有两个级联删除路径到同一个表。
一种解决方案是:不要这样做,关闭邮政表上其中一个FK的删除规则。另一种解决方案是将Sandip Patel在其他响应中将删除规则之一设置为“设置为空”(如更详细的描述)。
我希望这会有所帮助。