renombrado - ¿Qué significa el error de mysql 1025(HY000): el error en el cambio de nombre de ''./foo''(errorno: 150) significa?
#1025 error on rename of (12)
Intenté esto en mysql:
mysql> alter table region drop column country_id;
Y obtuve esto:
ERROR 1025 (HY000): Error on rename of ''./product/#sql-14ae_81'' to
''./product/region'' (errno: 150)
¿Algunas ideas? ¿Algo de clave extranjera?
De hecho, es un error de clave externa; puede averiguarlo 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 SHOW ENGINE INNODB STATUS
sección ERROR DE LLAVE EXTRAÑA 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.
Eche un vistazo en el archivo de error para su base de datos mysql. De acuerdo con el Bug # 26305, mi sql no te da la causa. Este error existe desde MySQL 4.1 ;-)
En mi caso, estaba usando MySQL workbench y me enfrenté al mismo problema al dejar caer 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 ''schema inspector''. Esto le da varias tablas, columnas, índices, ect.
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 denominada "Nombre".
Ahora ejecute la consulta: ALTER table table tableNamexx DROP KEY foreignKeyName;
Ahora puede ejecutar la instrucción drop que se ejecutará correctamente.
Lo sé, esta es una publicación antigua, pero es el primer golpe 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 tiene que desactivar la verificación de restricciones de clave externa usando este comando:
SET FOREIGN_KEY_CHECKS = 0;
Entonces puede ejecutar su (s) comando (s).
Una vez que haya terminado, no olvide activar de nuevo la verificación de restricciones de clave externa, usando este comando:
SET FOREIGN_KEY_CHECKS = 1;
Buena suerte con su esfuerzo.
Obra
SET FOREIGN_KEY_CHECKS=0;
antes de la Operación también puede hacer el truco.
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 el nombre del índice, algo como esto:
CONSTRAINT
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 región drop key foreign
region_ibfk_1
;
Y finalmente un:
alter table region drop column country_id;
¡Y estás listo para ir!
Probablemente haya otra tabla con una clave externa que haga referencia a la clave principal que está tratando de cambiar.
Para saber qué tabla causó el error, puede ejecutar SHOW ENGINE INNODB
STATUS
y luego ver la SHOW ENGINE INNODB
LATEST FOREIGN KEY ERROR
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;
Si está utilizando un cliente como MySQL Workbench, haga clic con el botón derecho en la tabla deseada desde donde se eliminará una clave externa, luego seleccione la pestaña de la clave externa y elimine los índices.
Entonces puede ejecutar la consulta de esta manera:
alter table table_name drop foreign_key_col_name;
Simplemente ejecute la consulta alter table usando ''KEY'' en lugar de ''FOREIGN KEY'' en la declaración desplegable. Espero que ayude a resolver el problema, y eliminará la restricción de clave externa y puede cambiar las columnas de la tabla y soltar la tabla.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
aquí en DROP KEY
lugar de DROP FOREIGN KEY
,
espero que ayude
Gracias
Supongo que problema de restricción de clave externa. ¿Country_id se usa como clave foránea en otra tabla?
No soy DB gurú, pero creo que resolví un problema como este (donde había una restricción fk) quitando el fk, haciendo mi alter table y luego rehaciendo el material fk.
Me interesará saber cuál es el resultado: en algún momento, mysql es bastante críptico.
También puede obtener este error al intentar soltar una clave externa no existente. Por lo tanto, al soltar claves externas, siempre asegúrese de que realmente existan.
Si la clave externa no existe, y aún está obteniendo 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'';
// ¡Deja la clave externa aquí!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Esto siempre me funciona bien :)
Tuve problemas similares una vez. Eliminé la clave primaria de la TABLA A, pero cuando estaba tratando de eliminar la columna de la clave externa de la tabla, BI se mostró el mismo error anterior.
No puede soltar la clave externa usando el nombre de columna y para omitir esto en PHPMyAdmin o con MySQL, primero elimine la restricción de clave externa antes de renombrar o eliminar el atributo.