mysql表多外键级联

mysql表多外键级联,mysql,sql,jpa,foreign-keys,cascade,Mysql,Sql,Jpa,Foreign Keys,Cascade,假设我有4个相关的表,如下图所示 广告-->可广告产品 这3个->表示如下,它们都是OneToOne相关的 ad有一个FK到可广告的(可空) advisable\u产品有一个FK toadvisable 可广告的产品有一个FK to产品 我已在删除级联上设置了约束3。 问题是:当产品被删除时,on delete cascade约束会自动删除可广告产品,但是如何使其同时删除可广告,并将ad中的FK设置为空。 我能弄明白的唯一方法就是写一个触发器来实现这一点。有没有更好的解决方案或更好的设计来实现这

假设我有4个相关的表,如下图所示

广告
-->可广告
产品

这3个
->
表示如下,它们都是
OneToOne
相关的

  • ad
    有一个FK到
    可广告的
    (可空)
  • advisable\u产品
    有一个FK to
    advisable
  • 可广告的产品
    有一个FK to
    产品
  • 我已在删除级联上设置了约束
    3。

    问题是:当
    产品
    被删除时,on delete cascade约束会自动删除
    可广告产品
    ,但是如何使其同时删除
    可广告
    ,并将
    ad
    中的FK设置为空。

    我能弄明白的唯一方法就是写一个触发器来实现这一点。有没有更好的解决方案或更好的设计来实现这一点


    欢迎提供任何建议或意见,谢谢~

    这是不可能的。根据FK的逻辑,可能还有另一种产品与广告相关

    想象一下,有1个广告“A1”和2个产品“P1”和“P2”。 可投放广告的产品有2项记录

    A1 P1

    A1 P2


    现在删除“P1”。“A1 P1”被级联删除,但“A1”无法删除,因为它用于“A1 P2”

    Hi StanislavL,可广告和可广告的产品是OneToOne,因此只有A1 P1是可能的,没有A1 P2FK不知道这一点。从您的业务逻辑来看,这在逻辑上是不可能的,但DB认为这是可能的。根据FKsOkay,我明白您的意思。所以,唯一的方法是手动写入逻辑,对吗?您可以为advisable_产品定义一个ON DELETE触发器,并删除advisable中的行