使用mysql中的left join在三个表之间进行更新

时间:2017-11-14 13:13:15

标签: mysql

我有三个表,想要更新这些表中的某些字段,但查询无法正常工作

这是我的查询:

UPDATE 
customers cust
    left JOIN
contract cont ON cust.Customer_id = cont.Customers_Customer_id
    left JOIN
payments pay ON cust.Customer_id = pay.Customers_Customer_id
SET 
cust.Customer_Name = 'Sara',
cust.Customer_id = '1201941718', 
cust.Customer_Mobile1 = '01258863956',
cust.Customer_Phone = '0224598755', 
cust.Customer_Mail = 'sara@gmail.com', 
cont.Customers_Customer_id = '1201941718', 
pay.Customers_Customer_id = '1201941718'
where cust.Customer_id = '2';

错误:

  

错误代码:1451。无法删除或更新父行:外键   约束失败(alhawelpayments,CONSTRAINT   fk_Payments_Customers1外键(Customers_Customer_id)   参考customersCustomer_id)在更新时不执行任何操作   没有行动)

2 个答案:

答案 0 :(得分:1)

您有一个或多个paymentscustomer_id = 2

相关联

当您将customer_id = 2更新为customer_id = '1201941718'时,付款变为孤儿,而FK约束会检测到完整性违规。

你能做的是:

  • 插入新的Customer_id ='1201941718'
  • 更新付款给Customer_id ='1201941718'
  • 删除Customer_id = 2

但是在db中你不应该改变记录的id。它没有任何好处。如果您需要向实体添加一些元数据,请添加另一个字段并单独保留PK。

答案 1 :(得分:0)

我认为由于外键中的ON UPDATE NO ACTION,它不起作用。当您更新Customer表中的Customer_id时,指向该表的外键将不再有效。

This回答处理ON DELETE NO ACTION但它也适用于更新。我认为您需要修改约束来修复此错误(由于其他原因,这可能不是正确的做法,了解更多有关架构可能会得到更好的答案)。