MySQL: Deletando uma foreign key

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!

Um comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *