繁体   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