Tengo una tabla en MySQL como esta (esto se devuelve al usar show create table user_org_contacts):

CREATE TABLE `user_org_contacts` (
 `user_org_contacts_id` int(11) NOT NULL AUTO_INCREMENT,
 `from_user_id` int(11) DEFAULT NULL,
 `to_org_user_id` int(11) DEFAULT NULL,
 `suggested_vacancy_id` int(11) DEFAULT NULL,
 `contact_date` datetime NOT NULL,
 `message` text,
 PRIMARY KEY (`user_org_contacts_id`),
 KEY `FK_Reference_53` (`from_user_id`),
 KEY `FK_Reference_54` (`to_org_user_id`),
 KEY `FK_Reference_55` (`suggested_vacancy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1

He notado que mi FK_Reference_54 está mal y apunta a la tabla incorrecta. Así que me gustaría cambiar este por el FK correcto.

Esto es lo que intenté:

ALTER TABLE `user_org_contacts` 
DROP FOREIGN KEY `FK_Reference_54`;  

ALTER TABLE `user_org_contacts`  
ADD CONSTRAINT `FK_Reference_54` 
    FOREIGN KEY (`to_org_user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE;  

Esto produce el siguiente error:

1091 - No se puede DROP 'FK_Reference_54'; comprobar que la columna / clave existe

2
Dennis 16 oct. 2018 a las 16:40

2 respuestas

La mejor respuesta

El problema es que está confundiendo índices con claves primarias.

La palabra clave CLAVE en realidad le muestra índices, mientras que las claves primarias usan las palabras clave RESTRICCIÓN ... CLAVE EXTRANJERA ...

Ejemplo:

CONSTRAINT `FK_name` FOREIGN KEY (`current_field_name`)
REFERENCES `external_table_name` (`external_field_name`) ON DELETE CASCADE ON UPDATE CASCADE

Entonces, en su caso, si desea eliminar su ÍNDICE, solo necesita llamar a esta consulta

ALTER TABLE `user_org_contacts` 
DROP INDEX `FK_Reference_54`; 

La próxima vez te sugiero que uses alguna interfaz de usuario para mysql como mysql workbench, con eso habrás notado el problema de inmediato.

1
Andrea Mauro 16 oct. 2018 a las 14:13

Primero intente eliminar esa columna ALTER TABLE tablename DROP COLUMN columnname; Luego: ALTER TABLE nombre de tabla AÑADIR nombre de columna tipo de datos.

O puede probar esta opción Modificar como. ALTER TABLE nombre de tabla MODIFICAR COLUMNA nombre de columna tipo de datos;

Espero que esto te ayudará.

0
Ammar Mehr 16 oct. 2018 a las 13:47