Comment changer MySQL Clé Primaire d'signé non signé?
Dans ma Base de données MySQL InnoDB avec les clés étrangères, j'ai accidentellement fait une partie de mes clés primaires signée au lieu de unsigned que je veux être.
Maintenant, je veux la changer avec une instruction ALTER TABLE, mais il ne fonctionne pas:
ALTER TABLE `users` CHANGE `id` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT
Erreur MySQL:
Error on rename of './db_dev/#sql-478_3' to './db_dev/users' (errno: 150)
Je ne comprends pas pourquoi. Je suis en train de travailler avec les Clés Étrangères et essayé d'utiliser un
SET foreign_key_checks = 0;
Déclaration avant l'exécution de l'instruction ALTER TABLE à partir de ci-dessus. Ne fonctionne pas non plus.
Avis: Tous mes tableaux sont encore vides. Il n'y a pas de données.
Depuis la Base de données a beaucoup de tables, il serait beaucoup de travail à abandonner toutes les clés étrangères puis les ajouter manuellement à nouveau. (si cela devait être la raison).
OriginalL'auteur Norwald2 | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Ce champ est utilisé dans la clé étrangère(s). Pour modifier ce champ de MySQL, vous devez effectuer ces étapes:
Oui, il est. Vous pouvez essayer de renommer la colonne de refactoring dans dbForge Studio for MySQL; il le fera automatiquement (dans l'Explorateur de Base de données).
J'ai utilisé cette approche et préparées à l'avance l'ensemble du processus, voir la réponse de stackoverflow.com/a/47169383/1241791
OriginalL'auteur Devart
Prendre un dump de la base de données à l'aide de mysql commande mysqldump et de la recherche et de l'ajouter unsigned chaque endroit où il est requis. Puis la restauration de la sauvegarde à même base de données. Avant de restaurer supprimer toutes les tables de que et de vidage.
Ne pas avoir à recréer de toutes mes clés étrangères m'a sauvé beaucoup de temps.
OriginalL'auteur Rohith
Essayer cette
ALTER TABLE 'users' MODIFY 'id' UNSIGNED NOT NULL AUTO_INCREMENT'
OriginalL'auteur Gaurav Gandhi
J'ai pris en charge un projet, qui a eu un problème identique de certains des clés primaires été signé, et à l'étranger a également été signé.
J'ai utilisé @Devart approche, mais j'ai été en mesure d'automatiser l'ensemble du processus.
J'ai été en mesure d'interroger le
information_schema
pour générer des instructions SQL que j'ai pu "couper-coller", puis, plus tard.Générer des instructions SQL à abandonner toutes les contraintes
Modifier tout
id
les colonnes qui doivent être modifiés pour UNSIGNEDModifier étrangères domaines pointant vers le
id
(Note dans la présente déclaration, tous sont modifiés de façon à ne pas être signé par erreur
même s'ils sont déjà non signé, mais cela ne cause pas de problèmes)
Réinsérez toutes les contraintes
Attention à ces instructions SQL, il peut être nécessaire de modifier votre schéma, par exemple, il suppose que votre carte d'identité principale est appelée "id".
Aussi, vous devez exécuter toutes les 4 de ces déclarations, AVANT d'exécuter une de leur sortie.
De L'Utilisation De MySQL 5.6
OriginalL'auteur Sam Anthony
MySQL Workbench vous permettra de le faire. Vous devez vous assurer que vous modifiez la CLÉ PRIMAIRE et de toutes les colonnes dans chaque et chaque table a une clé étrangère référence.
Je l'ai trouvé à travailler sur un certain nombre de scénarios, YMMV.
OriginalL'auteur Ian
Ce qui suit fonctionnera dans de nombreuses circonstances, même si cela dépend de la façon dont la colonne est en cours de modification
Cela peut ne pas fonctionner si elle en fait la FKs non valide dans ce cas vous aurez besoin de supprimer ou de recréer le FKs.
OriginalL'auteur exception