Intenté esto en mysql:
mysql> alter table region drop column country_id;
Y tengo esto:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
¿Algunas ideas? Cosas clave extranjera?
mysql
mysql-error-1025
Trenton
fuente
fuente
Respuestas:
Generalmente obtiene este error si sus tablas usan el motor InnoDB. En ese caso, tendría que soltar la clave externa, 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:
Esto debería mostrar el nombre del índice, algo como esto:
Ahora simplemente emita un:
Y finalmente un:
¡Y estás listo para irte!
fuente
De hecho, es un error de clave externa, puede descubrirlo usando perror:
Para obtener más detalles sobre lo que falló, puede usar
SHOW ENGINE INNODB STATUS
y buscar la sección ÚLTIMO ERROR DE CLAVE EXTRANJERA que contiene detalles sobre lo que está mal.En su caso, lo más probable es que algo esté haciendo referencia a la columna country_id.
fuente
También puede obtener este error al intentar descartar una clave externa no existente. Por lo tanto, al soltar claves foráneas, asegúrese siempre de que realmente existan.
Si la clave externa existe, y aún recibe este error, intente lo siguiente:
// ¡Suelta la clave foránea aquí!
Esto siempre hace el truco para mí :)
fuente
Simplemente ejecute la consulta alter table usando 'KEY' en lugar de 'FOREIGN KEY' en la instrucción drop. Espero que ayude a resolver el problema, elimine la restricción de clave externa y pueda cambiar las columnas de la tabla y descartar la tabla.
aquí en
DROP KEY
vez deDROP FOREIGN KEY
,Espero que ayude.
Gracias
fuente
Lo sé, esta es una publicación antigua, pero es el primer éxito en el motor de búsqueda favorito de todos si está buscando el error 1025.
Sin embargo, hay un "truco" fácil para solucionar este problema:
Antes de ejecutar su (s) comando (s), primero debe deshabilitar la verificación de restricciones de clave externa utilizando este comando:
Entonces puede ejecutar su (s) comando (s).
Una vez que haya terminado, no olvide habilitar la comprobación de restricciones de clave externa nuevamente, utilizando este comando:
Buena suerte con su esfuerzo.
fuente
Tuve problemas similares una vez. Eliminé la clave principal de la TABLA A, pero cuando estaba tratando de eliminar la columna de clave externa de la tabla BI se mostró el mismo error anterior.
No puede soltar la clave externa utilizando el nombre de la columna y para evitar esto en PHPMyAdmin o con MySQL, primero elimine la restricción de clave externa antes de renombrar o eliminar el atributo.
fuente
Eche un vistazo en el archivo de error para su base de datos mysql. De acuerdo con el Bug # 26305, mi sql no le da la causa. Este error existe desde MySQL 4.1 ;-)
fuente
Si está utilizando un cliente como MySQL Workbench, haga clic con el botón derecho en la tabla deseada de donde se eliminará una clave externa, luego seleccione la pestaña de clave externa y elimine los índices.
Luego puede ejecutar la consulta de esta manera:
fuente
Probablemente haya otra tabla con una clave externa que haga referencia a la clave primaria que está intentando cambiar.
Para averiguar qué tabla causó el error, puede ejecutar
SHOW ENGINE INNODB
STATUS
y luego mirar laLATEST FOREIGN KEY ERROR
secciónUse las categorías SHOW CREATE TABLE para mostrar el nombre de la restricción.
Lo más probable es que sea categories_ibfk_1
Use el nombre para soltar la clave externa primero y luego la columna:
fuente
Haciendo
antes de que la Operación también pueda hacer el truco.
fuente
Supongo que el problema de restricción de clave externa. ¿Se utiliza country_id como clave foránea en otra tabla?
No soy DB Guru, pero creo que resolví un problema como este (donde había una restricción fk) quitando el fk, haciendo mis cosas de la tabla alternativa y luego rehaciendo las cosas fk.
Me interesará saber cuál es el resultado: a veces mysql es bastante críptico.
fuente
En mi caso, estaba usando MySQL workbench y me enfrenté al mismo problema al soltar una de mis columnas en una tabla. No pude encontrar el nombre de la clave externa. Seguí los siguientes pasos para resolver el problema:
Rt. haga clic en su esquema y seleccione 'inspector de esquema'. Esto le da varias tablas, columnas, índices, etc.
Vaya a la pestaña llamada 'Índices' y busque el nombre de la columna debajo de la columna llamada 'Columna'. Una vez encontrado, verifique el nombre de la tabla para este registro bajo el nombre de la columna 'Tabla'. Si coincide con el nombre de la tabla que desea, anote el nombre de la clave externa de la columna llamada 'Nombre'.
Ahora ejecute la consulta: ALTER table tableNamexx DROP KEY foreignKeyName;
Ahora puede ejecutar la instrucción drop que se ejecutará con éxito
fuente
Recibí este error con MySQL 5.6 pero no tenía nada que ver con las claves externas. Esto estaba en una máquina con Windows 7 Professional que actuaba como un servidor en una LAN pequeña.
La aplicación cliente estaba realizando una operación por lotes que crea una tabla que la llena con algunos datos externos, luego ejecuta una consulta que se une con tablas permanentes y luego suelta la tabla "temporal". Este lote hace esto aproximadamente 300 veces y esta rutina en particular se había estado ejecutando semana tras semana durante varios años cuando de repente recibimos el Error 1025 No se puede cambiar el nombre del problema en un punto aleatorio del lote.
En mi caso, la aplicación estaba usando 4 declaraciones DDL, una CREATE TABLE seguida de 3 CREATE INDEX, no hay una clave foránea. Sin embargo, solo se crearon 2 de los índices y se cambió el nombre del archivo .frm de la tabla real, en el punto de falla.
Mi solución fue deshacerme de las declaraciones CREATE INDEX separadas y crearlas usando la declaración CREATE TABLE. Esto en el momento de escribir esto ha resuelto el problema para mí y para ayudar a alguien más a rascarse la cabeza cuando encuentran este hilo.
fuente
averageRatings = FOREACH groupedRatings GENERATE group AS movieID, AVG (ratings.rating) AS avgRating, COUNT (ratings.rating) AS numRatings;
Si está utilizando algún comando como el anterior, debe usar group en minúsculas. Esto puede resolver su problema, resolvió el mío. Al menos en script PIG.
fuente