MySQL eliminando algunas claves foráneas

Tengo una tabla cuya clave principal se usa en varias otras tablas y tiene varias claves externas a otras tablas.

CREATE TABLE location ( locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ... ) ENGINE = InnoDB; CREATE TABLE assignment ( assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, locationID INT NOT NULL, FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID) ... ) ENGINE = InnoDB; CREATE TABLE assignmentStuff ( ... assignmentID INT NOT NULL, FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID) ) ENGINE = InnoDB; 

El problema es que cuando trato de colocar una de las columnas de clave externa (es decir, ID de ubicación), me da un error.

“ERROR 1025 (HY000): Error al cambiar el nombre”

¿Cómo puedo soltar la columna en la tabla de asignación anterior sin obtener este error?

Como se explica aquí , parece que la restricción de clave externa debe descartarse por el nombre de la restricción y no por el nombre del índice. La syntax es:

 alter table footable drop foreign key fooconstraint 

Las claves externas están ahí para garantizar la integridad de los datos, por lo que no puede descartar una columna siempre que sea parte de una clave externa. Primero debes soltar la llave.

Creo que la siguiente consulta lo haría:

 ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX; 

Como todo el mundo dijo anteriormente, puede eliminar fácilmente un FK. Sin embargo, me acabo de dar cuenta de que puede ser necesario soltar la LLAVE en algún momento. Si tiene algún mensaje de error para crear otro índice como el último, es decir, con el mismo nombre, sería útil descartar todo lo relacionado con ese índice.

 ALTER TABLE your_table_with_fk drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result, drop KEY the_same_name_as_above 

Compruebe cuál es el nombre CONSTRAINT y el nombre FOREIGN KEY:

 SHOW CREATE TABLE table_name; 

Elimine tanto el nombre CONSTRAINT como el nombre FOREIGN KEY:

 ALTER TABLE table_name DROP FOREIGN KEY the_name_after_CONSTRAINT, DROP KEY the_name_after_FOREIGN_KEY; 

¡Espero que esto ayude!

Aquí hay una manera de soltar la restricción de clave externa, funcionará. location ALTER TABLE. location_id DROP KEY FOREIGN KEY location_ibfk_1 ;

Por lo general, obtiene este error si sus tablas utilizan el motor InnoDB. En ese caso, tendría que soltar la clave externa, y luego hacer la tabla alternativa y soltar la columna.

Pero la parte difícil es que no puede soltar la clave externa usando el nombre de la columna, sino que debería encontrar el nombre utilizado para indexarla. Para encontrar eso, emita lo siguiente, seleccione:

MOSTRAR la región CREATE TABLE; Esto debería mostrarle una fila, en la esquina superior izquierda, haga clic en la opción +, haga clic en el botón de texto completo y haga clic en Ir. Allí obtendrá el nombre del índice, algo como esto:

CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) REFERENCES country (id) EN ELIMINAR NINGUNA ACCIÓN EN ACTUALIZAR NO HAY ACCIÓN Ahora simplemente emita un:

alterar la región de la región drop key foreign region_ibfk_1;

o

simplemente escriba lo siguiente: – altere la tabla TableName drop foreign key TableName_ibfk_1 ;

recuerde que lo único que debe hacer para agregar _ibfk_1 después de su nombre de tabla es hacer esto: – TableName _ibfk_1

No puede soltar la columna de clave foránea porque se está haciendo referencia a ella desde la tabla assignmentStuff . Por lo tanto, primero debe eliminar la assignmentStuff.assignmentIDX restricción de clave externaStuff.assignmentIDX.

Ya se ha hecho una pregunta similar aquí . Consulte también aquí para obtener más información.

Prueba esto:

 alter table Documents drop FK__Documents__Custo__2A4B4B5E 

paso1: show create table vendor_locations;

paso2: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

funcionó para mí.

    Intereting Posts