簡體   English   中英

更改表和外鍵時出錯

[英]error with alter table and foreign key

我有2張桌子:

  • 安裝程序(字段:id,company,country,experience,name)
  • 聯系人(字段:姓名,電話,地址)

我想同時匹配兩個名稱,因此可以單擊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 )參考Contactsname#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM