web-dev-qa-db-fra.com

incapable d'abandonner la clé étrangère

Je voudrais déposer la clé étrangère dans mon tableau, mais été dans ce message d'erreur

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>
25
solomon

Pour éviter cette erreur en essayant de supprimer une clé étrangère, utilisez le nom de la contrainte plutôt que le nom de la colonne de la clé étrangère.

Quand j'ai essayé

mysql> ALTER TABLE mytable DROP PRIMARY KEY;

J'ai eu une erreur

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

Je l'ai résolu en utilisant:

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

Quelques liens qui vous aideront.

lien 1

link 2 [chercher Posté par Alex Blume le 7 novembre 2008 17h09 & Publié par Hector Delgadillo le 21 janvier 2011 16h57]

6
Fahim Parkar

La solution décrite ici par Chris White a fonctionné pour moi. 

Le problème fondamental est que MySQL crée à la fois un index et une clé étrangère. Les deux doivent être supprimés (la clé étrangère d'abord contrairement à ce que Chris a dit).

  1. show create table nom_table;

    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. Supprimer la contrainte de clé étrangère:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. Supprimer la clé

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

Cela l'a fait pour moi. 

33
bbrame

Cela ressemble à un bogue dans la messagerie d'erreur de MySQL. ( http://bugs.mysql.com/bug.php?id=10333 )

Utilisez SHOW CREATE TABLE table_name pour afficher le nom actuel de la clé étrangère. Il semble que cela puisse être un problème de navigateur de requête mysql lors de la génération de la requête avec une mauvaise orthographe du nom de clé étrangère.

7
Amarnasan

Pour éviter cette erreur en essayant de supprimer une clé étrangère, utilisez le nom de contrainte plutôt que le nom de colonne de la clé étrangère

1
Maksym Polshcha

Vous devriez essayer avec le nom de clé étrangère comme suggéré par Fahim Parkar. En fait, cela ne fonctionne pas toujours non plus.

Dans mon cas, j'ai utilisé le

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

code pour ajouter le fk par création.

Le problème avec ce code est qu’il n’est pas valide et devrait générer une erreur de syntaxe, mais qu’il a néanmoins ajouté une clé étrangère avec un nom aléatoire.

Quand j'ai ajouté le fk avec la bonne syntaxe:

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

le code suivant l'a laissé tomber correctement:

ALTER TABLE `table1` DROP FOREIGN KEY `fk`

Donc, ce genre d'erreur peut aussi arriver si vous essayez de supprimer une clé étrangère avec un nom invalide. Il est important de visualiser les propriétés de la table avec

SHOW CREATE TABLE `table1`

et vérifiez les noms de clé étrangère si vous obtenez ce type d'erreur.

0
inf3rno