首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么下面的MySQL查询生成错误?

为什么下面的MySQL查询生成错误?
EN

Stack Overflow用户
提问于 2021-03-21 09:17:32
回答 1查看 43关注 0票数 0

问题是:

代码语言:javascript
复制
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的初学者。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 09:34:45

您有一个表,其中包含从支付表到发票表的外键。当您删除发票时,您希望连接到它的付款行发生什么情况?您有ON UPDATE CASCADE,这意味着如果发票id更改,付款的invoice_id值将随之变化,但如果发票全部删除,它不会告诉它该做什么。

您可以添加ON DELETE CASCADE,这将删除与您删除的发票相关的付款。

但我强烈反对这样的硬删除,特别是对于重要的数据,如发票和付款。相反,我建议采用软删除方法,一种简单的方法是添加另一列“已删除”,而不是检索删除为真的字段。但我建议你深入考虑一下你的项目的想法,为什么要删除发票?它被取消了,还退款了吗?您的数据库应该反映这一点,您的应用程序也应该在其逻辑中反映这一点(例如不能为取消的发票付款)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66730614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档