2010-11-02 20 views
69

Por lo tanto, intento agregar una clave principal a una de las tablas de mi base de datos . En este momento tiene una clave principal de esta manera:# 1025 - Error al cambiar el nombre de './database/#sql-2e0f_1254ba7' a './database/table' (errno: 150)

PRIMARY KEY (user_id, round_number) 

Dónde user_id es una clave externa.

estoy tratando de cambiarlo a esto:

PRIMARY KEY (user_id, round_number, created_at) 

que 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 consigo:

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

Es una base de datos MySQL con el motor InnoDB.

+1

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

Respuesta

124

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

Para saber qué tabla causó el error, puede ejecutar SHOW ENGINE INNODB STATUS y luego mirar la sección LATEST FOREIGN KEY ERROR.

+0

En mi caso, la base de datos fue creada recientemente, sin ninguna tabla. –

20

Para aquellos que están recibiendo 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.

28

Como dije antes, debe eliminar los FK. En MySQL hacerlo de esta manera:

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 –

13

Para pasar por alto esta en phpMyAdmin o con MySQL, primero quitar la restricción de clave externa antes de cambiar el nombre del atributo.

(para usuarios de phpMyAdmin: Para eliminar FK constriñe en phpMyAdmin, seleccione el atributo y haga clic en "Ver relación" al lado de "imprimir" en la barra de herramientas debajo de la estructura de la tabla)

+1

Creo que esta es la respuesta más precisa – MontrealDevOne

3

Si usted está tratando de eliminar una columna que es una LLAVE EXTRAÑA, debe encontrar el nombre correcto que no es el nombre de la columna. Por ejemplo: si estoy intentando 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 línea CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`).
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Esto eliminará el servidor de clave externa de la tabla de alarmas.

3

que había este problema, que es para-clave externa

Haga clic en la Relation View (como la imagen de abajo) y luego encontrar el nombre del campo que se va a quitar, y bajo la Foreign key constraint (INNODB) columna, ¡simplemente pon el selector a nada!Significa que no hay-clave externa

enter image description here

Esperanza que funciona!

0

Si está agregando una clave externa y se ha enfrentado a este error, podría ser que el valor en la tabla secundaria no esté presente en la tabla padre.

Digamos que para la columna a la que se debe agregar la clave externa, todos los valores se han establecido 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 la clave foránea que funcionó para mí.

Cuestiones relacionadas