Tengo una tabla cuya clave principal se usa en varias otras tablas y tiene varias claves externas para 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 intento eliminar una de las columnas de clave externa (es decir, locationIDX) me da un error.
"ERROR 1025 (HY000): error al cambiar el nombre"
¿Cómo puedo colocar la columna en la tabla de asignación anterior sin obtener este error?
SHOW CREATE TABLE footable;
para ver cuál es el nombre de la restricción. No es el nombre de la columna per-se. ¡Gracias por la respuesta!Las claves externas están ahí para garantizar la integridad de los datos, por lo que no puede soltar una columna siempre que forme parte de una clave externa. Primero debe soltar la clave.
Creo que la siguiente consulta lo haría:
fuente
Como todos dijeron anteriormente, puede eliminar fácilmente un FK. Sin embargo, me di cuenta de que puede ser necesario soltar la CLAVE en algún momento. Si tiene algún mensaje de error para crear otro índice como el último, quiero decir con el mismo nombre, sería útil descartar todo lo relacionado con ese índice.
fuente
Verifique cuál es el nombre CONSTRAINT y el nombre de la LLAVE EXTRANJERA:
Elimine tanto el nombre de RESTRICCIÓN como el nombre de CLAVE EXTRANJERA:
¡Espero que esto ayude!
fuente
Aquí hay una manera de eliminar la restricción de clave externa, funcionará. ALTERAR TABLA
location
.location_id
GOTA LLAVE EXTRANJERAlocation_ibfk_1
;fuente
Oye, seguí alguna secuencia anterior y encontré alguna solución.
Obtendrá FK Restringir nombre como
Ahora necesita eliminar estas restricciones. por alter table commantd
Luego suelte la columna de la tabla,
fuente
Generalmente obtiene este error si sus tablas usan el motor InnoDB. En ese caso, tendría que soltar la clave foránea, y luego hacer la tabla alter 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 debe encontrar el nombre utilizado para indexarla. Para encontrar eso, emita la siguiente selección:
MOSTRAR CREAR TABLA región; Esto debería mostrar una fila, en la esquina superior izquierda, haga clic en la opción +, haga clic en el botón de texto completo y luego haga clic en Ir. Allí obtendrá el nombre del índice, algo como esto:
RESTRICCIÓN region_ibfk_1 LLAVE EXTRANJERA (country_id) REFERENCIAS country (id) EN ELIMINAR SIN ACCIÓN EN LA ACTUALIZACIÓN SIN ACCIÓN Ahora simplemente emita un:
alter table region drop clave externa region_ibfk_1;
o
más simplemente escriba: - alterar tabla TableName soltar clave foránea TableName_ibfk_1 ;
recuerde que lo único es agregar _ibfk_1 después de su nombre de tabla para hacer así: - TableName _ibfk_1
fuente
No puede descartar la columna de clave externa porque se hace referencia a ella desde la tabla
assignmentStuff
. Por lo tanto, primero debe eliminar la restricción de clave externaassignmentStuff.assignmentIDX
.Una pregunta similar ya se ha hecho aquí . Consulte también aquí para más información.
fuente
Prueba esto:
fuente
paso 1:
show create table vendor_locations;
paso 2:
ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
Funcionó para mí.
fuente
primero necesita obtener el nombre de restricción real por esta consulta
Esta consulta dará como resultado un nombre de restricción de la clave externa, ahora debajo de la consulta la descartará.
El último número en el nombre de restricción anterior depende de cuántas claves externas tiene en la tabla
fuente