Chaves estrangeiras são elementos muito úteis para manter a boa integridade de um banco mas muitas vezes podem ser chatas, principalmente na hora de deletar, a coisa fica pior se você usa sistemas como o PHPMyAdmin.
Algumas pessoas quando clicam para deletar um chave estrangeira no PHPMyAdmin, se deparam com o seguinte problema:
#1553 - Cannot drop index 'nome_da_fk': needed in a foreign key constraint
Isso acontece por que o PHPMyAdmin está tentando deletar a Index e não a FK, primeiro é necessário deletar a FK e depois deletar a index, se você não souber qual o nome da FK para deletar, você pode usar o comando SHOW CREATE TABLE `nome_tabela`, esse comando exibe o código SQL usado para criar a tabela, assim você pode pegar o nome da FK para deletar.
Vou usar um exemplo com um banco de apenas 2 tabelas, uma tabela chamada logins e outra chama posts, segue o SQL para criação dessas tabelas:
CREATE TABLE `logins` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `logins_id` int(11) NOT NULL, `texto` text, PRIMARY KEY (`id`), KEY `fk_posts` (`logins_id`), CONSTRAINT `fk_posts` FOREIGN KEY (`logins_id`) REFERENCES `logins` (`id`) ON DELETE CASCADE );
Depois de criado, eu quero deletar a FK de posts.
Primeiro devemos deletar a FK:
ALTER TABLE posts DROP FOREIGN KEY fk_posts;
Agora devemos deletar a Index dessa FK:
ALTER TABLE posts DROP INDEX fk_posts;
Resolvido!
Obrigado pela dica!