Changement primary key (id) d'une ligne dans une table et de modifier les autres vers le bas
J'ai une table MySQL qui ressemble à ceci:
Je voulais changer de telle sorte que l'entrée avec l'id 15 (femmes, robe) a maintenant une clé primaire de 8 et puis les autres sont décalées l'une, par exemple, les Tops Enfants maintenant sera de 9, etc. Est-il un moyen facile de le faire via phpmyadmin ou d'une requête SQL? Aussi parce que l'id 15, qui est déjà utilisé en tant que clé étrangère ailleurs, je voulais que ce changement reflète toute la place dans les autres tables.
. . Ne modifiez pas les clés primaires. Le fait qu'il est utilisé souligne pourquoi vous ne devriez pas changer.
que faire si j'ai?
que faire si j'ai?
SET foreign_key_checks = 0; <run all the update careful queries>; SET foreign_key_checks = 1;
OriginalL'auteur adit | 2013-06-19
Vous devez vous connecter pour publier un commentaire.
On ne doit pas modifier la clé primaire - jamais. En outre, il peut être utile de penser à PKs que les valeurs non numériques. Imaginez que vous utilisez générée automatiquement Guid pour vos clés primaires.
Si vous voulez renuméroter vos articles, puis la colonne que vous souhaitez modifier doivent être séparés colonne numérique, qui vous traiter explicitement comme un numéro de séquence de toutes sortes. Ensuite, vous pouvez faire ce que vous voulez avec trois
UPDATE
états:OriginalL'auteur dasblinkenlight
Vous ne pouvez pas modifier une "clé primaire", et pour une bonne raison. La clé primaire est susceptible d'être utilisé par d'autres tables pour faire référence à une ligne particulière. Donc, un changement ne devrait pas être locale dans le tableau, il devrait être dans chaque table de référence.
Si vous souhaitez modifier les valeurs dans la colonne, alors vous devez d'abord supprimer la contrainte de clé primaire.
Si vous avez vraiment à faire une telle chose, voici quelques considérations:
on delete cascade
).(Je dois admettre que j'ai peut-être raté quelque chose, parce que ce n'est pas quelque chose que je pourrais jamais le faire.)
La modification d'une clé primaire, en particulier celle utilisée dans les relations de clé étrangère, ne doit pas être prise à la légère. Le but de ces touches est de maintenir l'intégrité relationnelle. Vous ne devez pas être dérangé par les lacunes de la clé ou de l'absence de séquentialité. Si vous voulez un numéro séquentiel, vous pouvez ajouter ce dans une autre colonne.
OriginalL'auteur Gordon Linoff
Peut-être vous devriez modifier votre enfant tableau FK avec une CASCADE de mise À JOUR de l'opération, de sorte que les changements sur la table parent se reflètent sur la table enfant.
Voir la référence de MySQL pour FK est: http://dev.mysql.com/doc/refman/5.1/en/create-table-foreign-keys.html
Plus tard, vous pouvez exécuter les opérations suivantes:
OriginalL'auteur fpinvidio