MySQL - 将外键添加到现有表

时间:2014-01-29 02:58:07

标签: mysql sql database foreign-keys cascading-deletes

我正在尝试向下表添加外键,因此当从其父表'accounts'中删除一行时,'threads'中的相应行将被删除。我已经成功完成了'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使用它的内置工具自动生成的。

有人可以向我解释是什么原因导致抛出此错误以及如何修复它?

3 个答案:

答案 0 :(得分:3)

我认为你能做的事情如下:

  • 检查表格是否存在DROP TABLE IF EXISTS
  • REPAIR TABLE
  • 尝试插入值,它应该可以。

答案 1 :(得分:2)

你看过这个链接吗? Link

他谈到了与InnoDB的Rapairing表。我想你放弃桌子并创建一个新的,现在用外键。我在这做了很多!你也可以看到这个link ......

您是否检查过所有桌子是否都有相同的引擎?

答案 2 :(得分:1)

这个答案是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;

希望这有助于任何人遇到同样的问题。