# 1025 - Error al cambiar el nombre de './database/#sql-2e0f_1254ba7' a './database/table' (errno: 150)

81

Entonces estoy tratando de agregar una clave principal a una de las tablas en mi base de datos. En este momento tiene una clave primaria como esta:

PRIMARY KEY (user_id, round_number)

Donde user_id es una clave externa.

Estoy tratando de cambiarlo a esto:

PRIMARY KEY (user_id, round_number, created_at)

Estoy haciendo esto en phpmyadmin haciendo clic en el icono de la clave principal en la vista de estructura de la tabla.

Este es el error que obtengo:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

Es una base de datos MySQL con motor de tabla InnoDB.

Richard Knop
fuente
1
Una búsqueda rápida con Google me da la idea de que este problema está relacionado con restricciones. Posibles enlaces útiles: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html y simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

Respuestas:

138

Probablemente haya otra tabla con una clave externa que hace referencia a la clave principal que está intentando cambiar.

Para averiguar qué tabla causó el error, puede ejecutar SHOW ENGINE INNODB STATUSy luego mirar la LATEST FOREIGN KEY ERRORsección.

Ike Walker
fuente
2
En mi caso, la base de datos fue creada recientemente, sin tablas.
Guilherme Ferreira
33

Como se dijo antes, debes eliminar los FK. En Mysql hazlo así:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
Wellington Lorindo
fuente
1
Tu respuesta realmente me ayudó. DROP FOREIGN KEY resolvió el problema. Gracias
Ram Babu S
1
Esto también resolvió mi problema, pero el mismo script estaba funcionando en mi desarrollo MySQL. ¿Es esto algo que cambió en una versión de MySQL?
Bancarel Valentin
24

Para aquellos que están llegando a esta pregunta a través de Google ... este error también puede ocurrir si intenta cambiar el nombre de un campo que actúa como una clave externa.

Dave C
fuente
13

Para omitir esto en PHPMyAdmin o con MySQL, primero elimine la restricción de clave externa antes de cambiar el nombre del atributo.

(Para usuarios de PHPMyAdmin: Para eliminar las restricciones de FK en PHPMyAdmin, seleccione el atributo y luego haga clic en "vista de relación" junto a "vista de impresión" en la barra de herramientas debajo de la estructura de la tabla)

LazerSharks
fuente
1
Creo que esta es la respuesta más precisa
MontrealDevOne
4

Si está intentando eliminar una columna que es una CLAVE EXTRANJERA, debe encontrar el nombre correcto que no es el nombre de la columna. Por ejemplo: si estoy tratando de eliminar el campo del servidor en la tabla de alarmas, que es una clave externa a la tabla de servidores.

  1. SHOW CREATE TABLE alarm; Busque la CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)línea.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Esto eliminará el servidor de claves foráneas de la tabla de alarmas.

Bonnie Varghese
fuente
4

Tuve este problema, es para clave externa

Haga clic en Relation View(como en la imagen de abajo) y luego busque el nombre del campo que va a eliminar, y debajo de la Foreign key constraint (INNODB)columna, simplemente ponga la selección en nada. Significa que no hay clave externa

ingrese la descripción de la imagen aquí

¡Espero que funcione!

Mohammad Kermani
fuente
0

Si está agregando una clave externa y enfrenta este error, podría ser que el valor de la tabla secundaria no esté presente en la tabla principal.

Digamos que la columna a la que se debe agregar la clave externa tiene todos los valores establecidos en 0 y el valor no está disponible en la tabla a la que se hace referencia.

Puede establecer algún valor que esté presente en la tabla principal y luego agregar una clave externa funcionó para mí.

Apátrida
fuente