我正在尝试向下表添加外键,因此当从其父表'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使用它的内置工具自动生成的。
有人可以向我解释是什么原因导致抛出此错误以及如何修复它?
答案 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;
希望这有助于任何人遇到同样的问题。