外键约束问题

时间:2010-11-30 17:31:59

标签: mysql

有问题的表格是:

询问

  • ID
  • accepted_quote_id

supplier_enquiry

  • ID
  • enquiry_id

引用

  • ID
  • enquiry_id
  • supplier_enquiry_id

约束如下:

  • CONSTRAINT supplier_enquiry_ibfk_1 FOREIGN KEY(enquiry_id)参考enquiryid)ON DELETE CASCADE

  • CONSTRAINT quote_ibfk_1 FOREIGN KEY(supplier_enquiry_id)参考supplier_enquiryid)ON DELETE CASCADE

  • 约束enquiry_ibfk_9外键(accepted_quote_id)参考quoteid

所以我希望这种方式起作用的方式是:

  1. 如果删除“查询”,则会删除子项“supplier_enquiry”记录
  2. 如果删除“supplier_enquiry”,则会删除子项“引用”记录
  3. 如果'查询'引用该引用的ID
  4. ,则不能删除'引用'

    我遇到的问题是删除“查询”记录时。因为它需要首先删除子记录,即'supplier_enquiry'和'quote',如果'accepted_quote_id'引用'quote',则不能删除'inquiry'。

    知道如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

通过使其他两个表依赖于查询来消除循环引用。

所以:

quote.enquiry_id引用enquiry.id

supplier_enquiry.enquiry_id引用enquiry.id

编辑:可能不清楚。我建议在引用表上引用一个新约束,将enquiry_id引用到enquiry.id,然后删除enquiry_ibfk_9

答案 1 :(得分:0)

在删除之前将引用更新为NULL。