You are on page 1of 5

MySQL error 1025: explicacin y solucin

Este post es una traduccin al castellano y una ampliacin del post MySQLs ERROR
1025 explained.
En versiones de MySQL superiores o iguales a la 5.5.* el motor de InnoDB ha sido
cambiado totalmente y con ello la forma de tratar las claves externas, con ello aparecen
nuevos errores como el que vamos a tratar de solucionar hoy:
MySQL Error Number 1025
Error on rename of tabla temporal to tabla real (errno: 150)

Este error puede aparecer al intentar cambiar el nombre de la columna, o el tipo de datos
o su valor por defecto, en fin, cualquier modificacin que afecte a una columna de la
tabla que sea una foreign key (clave extranjera). O sea MySQL emite un mensaje de
error crtico, error on rename (error en cambiar el nombre), cuando se intenta
modificar una tabla de tal manera que se tenga que romper una restriccin de clave
externa.

Explicacin del error 1025 de MySQL


Para comprender la solucin primero debemos entender el origen de este error y con
ello el funcionamiento de MySQL. Este error se produce porque ALTER TABLE
realmente funciona haciendo una copia de la tabla, luego, cambiar el nombre de la tabla
antigua y la saca de en medio y mueve la tabla nueva en su lugar. EL error 1025 es uno
de los mensajes de error menos significativo en MySQL.
Hay un poco ms de informacin al ejecutar la consulta SHOW INNODB STATUS.
Existe otra herramienta de monitorado llamada innotop que tambin puede ayudar a
detectar el origen del error.

Solucin al error 1025 de MySQL


La solucin pasa por eliminar la clave externa primero, luego el ndice. El orden sera el
siguiente:
1. eliminar la clave externa
2. eliminar el ndice que se genera al crear la clave externa
3. modificar la columna con los cambios deseados
4. volver a crear la clave externa (automticamente se crea el ndice)
Yo soy de la vieja escuela y utilizo an en MySQL Query Browser pero todos estos
pasos se pueden realizar con consultas SQL, la solucin ms completa con SQL sera la
siguiente:
1. SET FOREIGN_KEY_CHECKS = 0;
2. ALTER TABLE tableX DROP FOREIGN KEY fkId;
3. ALTER TABLE tableX DROP INDEX fkId;
4. ALTER TABLE tableX CHANGE COLUMN changes
5. ALTER TABLE tableX ADD CONSTRAINT fkId FOREIGN KEY fkId
(column) REFERENCES
6. SET FOREIGN_KEY_CHECKS = 1;
Los pasos 1 y 6 son opcionales, son ms bien por si falla sin ellos.
Importante: este error solo afecta a las claves externas cualquier otro tipo de ndices es
automticamente borrado y restaurado (en caso de hacerlo desde MySQL Query
Browser) en mi caso esta columna tambin era nica y el ndice se borr y cre de
manera automtica.
Con el Query Browser es todo ms sencillo, es eliminar la clave externa:

Y luego el ndice:

Os funciona?
Quizs tambin le interese:
MySQL 5.6.11 error 1146
Fechas, valor por defecto en MySQL
Claves nicas para valores nulos en MySQL
Campos con valor nico en SQL Server
Linkwithin

Publicado por Reynier de la Rosa en 11:07


Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con
FacebookCompartir en Pinterest
Etiquetas: bugs, manuales, MySQL, SQL, tutoriales
2 comentarios:
Annimo dijo...

funciono a la perfeccin.
Gracias!
10 de marzo de 2011, 19:51
Annimo dijo...
ES posible que haya que realizar algn paso adicional, dependiendo del cambio
que se realice en la columna. Si no deja crear la constraint, aqu explican los
posibles motivos:
http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-tablemydbsql-328_45frm-errno-150/
(Por ejemplo, yo cambi la collation de una columna y tuve que cambiar
tambin la de la clave fornea antes de crear la clave)