外键约束问题
问题描述:
的问题表是:外键约束问题
查询
- ID
- accepted_quote_id
supplier_enquiry
- ID
- enquiry_id
报价
- ID
- enquiry_id
- supplier_enquiry_id
约束如下:
约束
supplier_enquiry_ibfk_1
外键(enquiry_id
)参考文献enquiry
(id
)ON DELETE CASCADE约束
quote_ibfk_1
外键(supplier_enquiry_id
)参考文献supplier_enquiry
(id
)ON DELETE CASCADE约束
enquiry_ibfk_9
对外KEY(accepted_quote_id
)参考文献quote
(id
)
因此,我希望这个工作的方式是:
- 如果删除“询问”它删除子“supplier_enquiry”记载
- 如果删除“supplier_enquiry”它删除子“报价”记录
- 您cannnot删除“报价”如果“询问”引用引用的ID
的我遇到的问题是删除“查询”记录。由于需要首先删除子记录,即'supplier_enquiry'和'quote',如果'accepted_quote_id'引用了'quote',那么'查询'不能被删除。
任何想法如何克服这个问题?
答
通过使两个其他表依赖于查询来摆脱循环引用。
所以:
quote.enquiry_id引用enquiry.id
和:
supplier_enquiry.enquiry_id引用enquiry.id
编辑:这可能是不清楚的。我建议对引用enquiry_id到enquiry.id的引用表进行新的约束,然后删除enquiry_ibfk_9
答
删除前将引用更新为NULL。