web-dev-qa-db-fra.com

# 1025 - Erreur lors du changement de nom de './database/#sql-2e0f_1254ba7' en './database/table' (errno: 150)

J'essaie donc d'ajouter une clé primaire à l'une des tables de ma base de données. À l'heure actuelle, il a une clé primaire comme celle-ci:

PRIMARY KEY (user_id, round_number)

Où user_id est une clé étrangère.

J'essaie de le changer en ceci:

PRIMARY KEY (user_id, round_number, created_at)

Je le fais dans phpmyadmin en cliquant sur l'icône de clé primaire dans la vue de structure de table.

C'est l'erreur que j'obtiens:

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

C'est une base de données MySQL avec le moteur de table InnoDB.

77
Richard Knop

Il existe probablement une autre table avec une clé étrangère référençant la clé primaire que vous essayez de modifier.

Pour savoir quelle table a provoqué l'erreur, vous pouvez exécuter SHOW ENGINE INNODB STATUS puis regardez le LATEST FOREIGN KEY ERROR section.

133
Ike Walker

Comme il a été dit, vous devez supprimer les FK avant. Sur Mysql, faites comme ça:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
32
Wellington Lorindo

Pour ceux qui parviennent à cette question via Google ... cette erreur peut également se produire si vous essayez de renommer un champ qui agit comme une clé étrangère.

23
Dave C

Pour éviter cela dans PHPMyAdmin ou avec MySQL, commencez par supprimer la contrainte de clé étrangère avant de renommer l'attribut.

(Pour les utilisateurs de PHPMyAdmin: Pour supprimer les contraintes FK dans PHPMyAdmin, sélectionnez l'attribut puis cliquez sur "Vue relation" en regard de "Vue d'impression" dans la barre d'outils sous la structure du tableau.)

13
LazerSharks

J'ai eu ce problème, c'est pour la clé étrangère

Cliquez sur le Relation View (comme sur l'image ci-dessous) puis recherchez le nom du champ que vous allez supprimer, et sous le symbole Foreign key constraint (INNODB) colonne, il suffit de mettre la sélection à rien! Signifie pas de clé étrangère

enter image description here

J'espère que ça marche!

4
M98

Si vous essayez de supprimer une colonne qui est une clé étrangère, vous devez trouver le nom correct qui n'est pas le nom de la colonne. Exemple: si j'essaie de supprimer le champ serveur de la table des alarmes, qui est une clé étrangère de la table des serveurs.

  1. SHOW CREATE TABLE alarm; Recherchez la ligne 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`

Cela supprimera le serveur de clé étrangère de la table des alarmes.

4
Bonnie Varghese

Si vous ajoutez une clé étrangère et avez rencontré cette erreur, il se peut que la valeur de la table enfant ne soit pas présente dans la table parent.

Supposons que pour la colonne à laquelle la clé étrangère doit être ajoutée, toutes les valeurs soient définies sur 0 et que la valeur ne soit pas disponible dans la table avec laquelle vous la référencez.

Vous pouvez définir une valeur présente dans la table parent, puis l'ajout d'une clé étrangère a fonctionné pour moi.

0
StateLess