no se puede soltar la clave foránea


Me gustaría soltar la clave foránea en mi tabla, pero he estado en este mensaje de error

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>
Author: Fahim Parkar, 2012-05-17

5 answers

Para evitar este error al intentar soltar una clave foránea, utilice el nombre de restricción en lugar del nombre de columna de la clave foránea.

Cuando intenté

mysql> ALTER TABLE mytable DROP PRIMARY KEY;

Tengo un error como

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

Lo resolví usando:

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

Algunos enlaces que te ayudarán.

Link 1

Link 2 [buscar Publicado por Alex Blume en Noviembre 7 2008 5:09pm & Publicado por Hector Delgadillo en enero 21 2011 4:57am]

 6
Author: Fahim Parkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-17 09:34:36

La solución descrita aquí por Chris White funcionó para mí.

El problema raíz es que MySQL crea tanto un índice como una clave foránea. Ambos deben ser eliminados (la clave foránea primero contrariamente a lo que dijo Chris).

  1. Mostrar crear tabla nombre_ tabla;

    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 foránea:

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

 32
Author: bbrame,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 12:41:18

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

Use SHOW CREATE TABLE table_namepara ver el nombre real de la clave foránea. Parece que podría ser un problema del navegador de consultas mysql al generar la consulta con una ortografía incorrecta del nombre de la clave externa.

 7
Author: Amarnasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-17 09:04:32

Para evitar este error al intentar soltar una clave foránea, utilice el nombre de restricción en lugar del nombre de columna de la clave foránea

 1
Author: Maksym Polshcha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-17 09:02:54

Deberías probar con el nombre de la clave foránea como sugirió Fahim Parkar. En realidad eso tampoco funciona siempre.

En mi caso usé el

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

Código para añadir el fk por creación.

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

Cuando agregué el fk con la sintaxis correcta:

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

El siguiente código lo eliminó correctamente:

ALTER TABLE `table1` DROP FOREIGN KEY `fk`

Así que esto tipo de error puede ocurrir si intenta eliminar una clave externa con un nombre no válido. Es importante ver las propiedades de la tabla con

SHOW CREATE TABLE `table1`

Y compruebe los nombres de las claves foráneas si obtiene este tipo de errores.

 0
Author: inf3rno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 05:20:29