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 por tudo!

Autor: Guilherme Pedrazzi.

Deixe uma resposta