24

me gustaría dejar la llave extranjera en mi mesa, pero fue en este mensaje de errorincapaz de dejar la llave

mysql> alter table customers drop foreign key customerid; 
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152) 
mysql> 
+1

Esto puede ayudar a entender http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad

+1

@Imdad Este enlace describe otro error - (errno: 150) – Devart

+0

Pruebe esto. Crear nueva tabla (sin restricción de clave externa). copie los datos a la nueva tabla (usando la sintaxis INSERT INTO new_table SELECT * FROM old_table) Suelta la tabla anterior – Imdad

Respuesta

6

Para evitar este error al intentar soltar una clave externa, use el nombre de la restricción en lugar del nombre de la columna de la clave externa.

cuando traté

mysql> ALTER TABLE mytable DROP PRIMARY KEY; 

llegué error como

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150). 

Lo resuelto usando:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3); 

Algunos enlaces que le ayudarán.

link 1

link 2 [Busque Publicado por Alex Blume 2008 el 7 de noviembre 17:09 & Publicado por Héctor Delgadillo el 21 enero 2011 04:57 am]

+0

no funciona para mí. – user60627

+0

funcionó para mí !. Gracias. – aizquier

1

para evitar ser este error al intentar eliminar una clave foránea, utilice el nombre de la restricción externa en lugar del nombre de la columna de la clave externa

7

Parece un error en los mensajes de error de MySQL. (http://bugs.mysql.com/bug.php?id=10333)

Uso SHOW CREATE TABLE table_name para ver el nombre real de la clave externa. Parece que podría ser un problema del navegador de consultas de MySQL al generar la consulta con una ortografía incorrecta del nombre de la clave externa.

+2

Me ayuda saber que mi restricción se creó como ÍNDICE, no como CLAVE EXTRAÑA. Luego usé la cláusula "DROP INDEX". Gracias. –

32

la solución descrita here by Chris White trabajó para mí.

El problema de raíz es que MySQL crea un índice y una clave externa. Ambos deben eliminarse (la clave externa primero es contraria a lo que dijo Chris).

  1. show create table table_name;

    SHOW CREATE TABLE `table_name`: 
    
    | table_name | CREATE TABLE `table_name` (
        `id` int(20) unsigned NOT NULL auto_increment, 
        `key_column` smallint(5) unsigned default '1', 
        KEY `column_tablein_26440ee6` (`key_column`), <--- shows key name 
        CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name 
    `second_table` (`id`) ON DELETE SET NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    
  2. Eliminar la restricción de clave externa:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`; 
    
  3. eliminar la clave

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`; 
    

Eso lo hizo por mí.

+1

+1 Quiero agregar que hay muchas preguntas (quizás duplicados) de esto, y la respuesta de @bbrame es la que funcionó para mí. –

+0

no tengo sección de restricción en mostrar crear tabla 'nombre' pero cuando lo hago desc 'nombre' puedo ver campo para tener restricción de clave externa – proprius

+0

Este es un ejemplo perfecto que muestra cómo lidiar con la caída de clave externa. Muchas gracias a @bbframe .it funcionó para mí. – prashant

0

Debe intentar con el nombre de la clave externa como Fahim Parkar sugirió. En realidad, eso tampoco funciona siempre.

En mi caso he utilizado el código

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`) 

para añadir el FK mediante la creación.

El problema con este código es que no es válido y debe arrojar algún tipo de error de sintaxis, pero aún agregó una clave externa con un nombre aleatorio.

Cuando he añadido el FK con la sintaxis correcta:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`) 

el siguiente código se redujo de forma adecuada:

ALTER TABLE `table1` DROP FOREIGN KEY `fk` 

Así que este tipo de error puede ocurrir también si intenta quitar una extranjera clave con un nombre inválido Es importante ver las propiedades de tabla con

SHOW CREATE TABLE `table1` 

y verificar los nombres de las claves foráneas si obtiene este tipo de errores.

Cuestiones relacionadas