[英]error with alter table and foreign key
我有2张桌子:
我想同时匹配两个名称,因此可以单击Installers名称的一个值,它可以向我显示Contacts表的值。
但是,当我尝试设置外键时(我的子表可能是Installers,因为我有更多这样的表,而Contacts将是父表。)它指出此错误:
查询SQL:
ALTER TABLE `Installers`
ADD FOREIGN KEY (`name`)
REFERENCES `SOLAR_PV`.`Contacts`(`name`)
ON DELETE CASCADE ON UPDATE CASCADE;
MySQL的地方:Documentación
SOLAR_PV
无法添加或更新子行:外键约束失败(SOLAR_PV
。#sql-32a_183
,CONSTRAINT#sql-32a_183_ibfk_1
FOREIGN KEY(name
)参考Contacts
(name
)#sql-32a_183_ibfk_1
这两个表都是InnoDB,Contacts.name和Installers.name都被索引
Installers的主键是id,Contacs的主键是name。
有什么问题的想法吗?
看来您的子表包含了一些主表中没有的记录,您可以通过以下查询来检查它:
SELECT id FROM Installers ins
LEFT JOIN SOLAR_PV.Contacts cnt ON ins.name=cnt.name
WHERE cnt.name IS NULL;
注意:假设名称是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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.