[英]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.