# 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.


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.


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`;

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.


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)


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.


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!


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í.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.