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?
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?
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:
MOSTRAR CREAR TABLA región;
Esto debería mostrar el nombre del índice, algo como esto:
RESTRICCIÓN
region_ibfk_1
FOREIGN KEY (country_id
) Referenciascountry
(id
) ON DELETE NO ACTION ON UPDATE NO ACTION
Ahora simplemente emita un:
alterar la región de la tabla soltar clave foránea
region_ibfk_1
;
Y finalmente un:
alter table region drop column country_id;
¡Y estás listo para irte!
De hecho, es un error de clave externa, puede descubrirlo usando perror:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
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.
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:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// ¡Suelta la clave foránea aquí!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Esto siempre hace el truco para mí :)
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.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
aquí en DROP KEY
vez de DROP FOREIGN KEY
,
Espero que ayude.
Gracias
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:
SET FOREIGN_KEY_CHECKS = 0;
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:
SET FOREIGN_KEY_CHECKS = 1;
Buena suerte con su esfuerzo.
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.
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 ;-)
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:
alter table table_name drop foreign_key_col_name;
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 la LATEST FOREIGN KEY ERROR
sección
Use 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:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Haciendo
SET FOREIGN_KEY_CHECKS=0;
antes de que la Operación también pueda hacer el truco.
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.
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
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.
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.