gpt4 book ai didi

mysql - 更改表和外键错误

转载 作者:行者123 更新时间:2023-11-29 07:33:34 25 4
gpt4 key购买 nike

我有 2 张 table :

  • 安装者(字段:ID、公司、国家/地区、经验、姓名)
  • 联系人(字段:姓名、电话、地址)

我想匹配这两个名称,因此我可以单击安装者名称的一个值,它可以向我显示联系人表的值。

但是,当我尝试设置外键时(我的子表可能是 Installers ,因为我有更多这样的表,而 Contacts 将是父表。)它指出此错误:

查询SQL:

ALTER TABLE `Installers` 
ADD FOREIGN KEY (`name`)
REFERENCES `SOLAR_PV`.`Contacts`(`name`)
ON DELETE CASCADE ON UPDATE CASCADE;

MySQL ha dicho:文档

1452 - Cannot add or update a child row: a foreign key constraint fails (SOLAR_PV.#sql-32a_183, CONSTRAINT #sql-32a_183_ibfk_1 FOREIGN KEY (name) REFERENCES Contacts (name) ON DELETE CASCADE ON UPDATE CASCADE)

两个表都是 InnoDB,Contacts.name 和 Installers.name 都已建立索引

安装程序的主键是 id,联系人的主键是名称。

知道会出现什么问题吗?

最佳答案

您的子表似乎包含一些主表中没有的记录,您可以通过以下查询来检查 -

SELECT id FROM Installers ins 
LEFT JOIN SOLAR_PV.Contacts cnt ON ins.name=cnt.name
WHERE cnt.name IS NULL;

注意:为了获得更好的性能,假设 name 是 int 类型,因为它是一个表中的主键。

如果您通过上述查询得到的记录很少,那么您可以按照以下 2 种方法 -

方法1:您可以在子表中删除这些记录,也可以在主表中插入这些记录,然后您可以通过此alter命令创建关系。

方法2:如果您不想更改表中的现有数据,但仍想执行更改查询,则按以下方式使用-

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE `Installers`
ADD FOREIGN KEY (`name`)
REFERENCES `SOLAR_PV`.`Contacts`(`name`)
ON DELETE CASCADE ON UPDATE CASCADE;

SET FOREIGN_KEY_CHECKS=1;

关于mysql - 更改表和外键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com