问题是:
DELETE
FROM sql_invoicing.invoices
WHERE client_id =
(SELECT client_id
FROM sql_store.customers
WHERE last_name = 'Smith')在上面的查询中,所使用的数据库在'sql_invoicing‘模式中有’发票‘表,而'customers’表位于'sql_store‘模式中。
产生的错误是:
错误代码: 1451。无法删除或更新父行:外键约束失败(“sql_invoicing”。“支付”,约束'fk_payment_invoice‘外键('invoice_id')引用’发票‘('invoice_id')在更新级联)
对不起,如果这个问题太天真了,我是MySQL的初学者。
发布于 2021-03-21 09:34:45
您有一个表,其中包含从支付表到发票表的外键。当您删除发票时,您希望连接到它的付款行发生什么情况?您有ON UPDATE CASCADE,这意味着如果发票id更改,付款的invoice_id值将随之变化,但如果发票全部删除,它不会告诉它该做什么。
您可以添加ON DELETE CASCADE,这将删除与您删除的发票相关的付款。
但我强烈反对这样的硬删除,特别是对于重要的数据,如发票和付款。相反,我建议采用软删除方法,一种简单的方法是添加另一列“已删除”,而不是检索删除为真的字段。但我建议你深入考虑一下你的项目的想法,为什么要删除发票?它被取消了,还退款了吗?您的数据库应该反映这一点,您的应用程序也应该在其逻辑中反映这一点(例如不能为取消的发票付款)。
https://stackoverflow.com/questions/66730614
复制相似问题