簡體   English   中英

MySQL-將外鍵添加到現有表

[英]MySQL - Adding Foreign Key To Existing Table

我正在嘗試向下表添加外鍵,因此,當從其父表“帳戶”中刪除一行時,“線程”中的相應行也將被刪除。 我已經使用'messages'表成功完成了此操作,該表是'threads'的子級。

ALTER TABLE  `threads` ADD FOREIGN KEY (  `owner_id` ) 
REFERENCES `social_network`.`accounts` (`id`) 
ON DELETE CASCADE 

現在,我得到了錯誤:

#1050 - Table '.\social_network\threads' already exists

這對我來說沒有任何意義,因為如果它還不存在,我就不會嘗試對其進行“ ALTER TABLE”操作。 更令人困惑的是,此SQL由phpMyAdmin使用內置工具自動生成。

有人可以向我解釋導致此錯誤的原因以及如何解決該錯誤嗎?

我認為您可以采取以下措施:

  • 檢查表是否存在DROP TABLE IF EXISTS存在
  • REPAIR TABLE
  • 嘗試插入值,它應該工作。

您看到此鏈接了嗎? 鏈接

他談到了InnoDB的Rapairing表。 我猜您放下表並使用外鍵創建一個新的表。 我在這里做了很多! 您也可以看到此鏈接 ...

您是否檢查了所有表是否具有相同的引擎?

此答案是Bruno Casali和Maverick發布的答案的后續。 實際上,我可以通過修理桌子來解決此問題。 InnoDB引擎不支持REPAIR操作,因此我只是重新創建並填充了表:

CREATE TABLE threads_tmp LIKE threads;
INSERT INTO threads_tmp SELECT * FROM threads;
TRUNCATE TABLE threads;
INSERT INTO threads SELECT * FROM threads_tmp;
DROP TABLE threads_tmp;

希望這對遇到同樣問題的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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