2011-10-04 14 views
5

Problemas con MySQL utilizando InnoDB y soltando una clave externa no utilizada. La clave externa hace referencia a la ID de otra tabla. Sin embargo, no necesito este campo.MySQL drop field; clave foránea errorno 150

He intentado eliminar el índice fk, lo cual no funciona, dice que es necesario en un contexto de clave externa. Y eliminando el campo, lo que me da un error:

1025 - Error al cambiar el nombre de './axis/#sql-ad8_1531' a' ./axis/Schedule'(Error: 150)

La mesa está actualmente vacío. No hay tablas que hagan referencia a este campo. ¿Alguna idea sobre cómo deshacerse de esto? ¿Además de crear una nueva tabla?

Si leo correctamente el siguiente error, no puedo abandonar la columna porque se ha declarado el índice fk. Y no puedo soltar el índice, porque la columna existe. Pollo & Huevo ??

ÚLTIMO EXTERIOR DE ERRORES CLAVE 111004 17:05:40 Error en la restricción de clave externa de la tabla de eje/Calendario: no existe un índice en la tabla que contendría las columnas como las primeras columnas, o los tipos de datos en la tabla no coincide con las de la tabla referenciada o una de las columnas ON ... SET NULL se declara NOT NULL. Restricción: , CONSTRAINT "fk_Schedule_Grp" FOREIGN KEY ("idGrp") REFERENCIAS "Grp" ("idGrp") AL ELIMINAR NINGUNA ACCIÓN EN ACTUALIZAR NO HAY ACCIÓN InnoDB: Renombrar tabla axis. a axis. Schedule ¡falló!

Respuesta

14

Es necesario utilizar

ALTER TABLE table_name DROP FOREIGN KEY constraint_name 

Aquí constraint_name es el nombre de la restricción más que el índice. Si no sabe qué es esto, puede averiguarlo emitiendo un SHOW CREATE TABLE. Es el identificador que aparece después de la palabra CONSTRAINT.

Editar: Desde su adición a la pregunta, parece que necesita emitir

ALTER TABLE table_name DROP FOREIGN KEY fk_Schedule_Grp 
+0

Usted es impresionante, creo que estaba confundiendo el índice con la restricción. Esto funcionó como un encanto para deshacerse de los tres. ¡Gracias! –

Cuestiones relacionadas