我有三个表,想要更新这些表中的某些字段,但查询无法正常工作
这是我的查询:
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。无法删除或更新父行:外键 约束失败(
alhawel
。payments
,CONSTRAINTfk_Payments_Customers1
外键(Customers_Customer_id
) 参考customers
(Customer_id
)在更新时不执行任何操作 没有行动)
答案 0 :(得分:1)
您有一个或多个payments
与customer_id = 2
当您将customer_id = 2
更新为customer_id = '1201941718'
时,付款变为孤儿,而FK约束会检测到完整性违规。
你能做的是:
但是在db中你不应该改变记录的id。它没有任何好处。如果您需要向实体添加一些元数据,请添加另一个字段并单独保留PK。
答案 1 :(得分:0)
我认为由于外键中的ON UPDATE NO ACTION,它不起作用。当您更新Customer表中的Customer_id时,指向该表的外键将不再有效。
This回答处理ON DELETE NO ACTION但它也适用于更新。我认为您需要修改约束来修复此错误(由于其他原因,这可能不是正确的做法,了解更多有关架构可能会得到更好的答案)。