J'ai une table mysql qui ressemble à ceci: p>
p>
Je voulais changer de telle que l'entrée avec ID 15 (Femmes, Robe) a maintenant une clé primaire de 8, puis les autres sont déplacées par une, donc par exemple, les enfants d'enfants seront maintenant 9, etc. Y a-t-il un façon facile de faire cela via phpmyadmin ou une requête SQL? En outre, parce que l'ID 15 est déjà utilisé comme une clé étrangère ailleurs, je voulais que ce changement soit reflété sur la place dans d'autres tables. P>
3 Réponses :
On ne devrait pas changer la clé primaire - jamais. De plus, il peut être bénéfique de penser aux PKS en tant que valeurs non numériques. Imaginez que vous utilisiez des GUDS autogénérées pour vos touches principales.
Si vous souhaitez renuméroter vos articles, la colonne que vous souhaitez modifier doit être une colonne numérique séparée, que vous traitez explicitement en tant que nombre de séquences. Ensuite, vous pouvez faire ce que vous voulez avec trois instructions code> Mettre à jour code>: p>
Vous ne pouvez pas modifier une "clé primaire" et pour une bonne raison. La clé principale est susceptible d'être utilisée par d'autres tables pour faire référence à une rangée particulière. Donc, un changement ne serait pas local dans la table, il faudrait être dans chaque table de référencement. P>
Si vous souhaitez modifier les valeurs de la colonne, vous devez d'abord laisser tomber la principale contrainte de clé. P>
Si vous devez vraiment faire une telle chose, voici quelques considérations: p>
sur Suppr Cascade code>). Li>
- Créez une table de mappage qui a l'ancienne valeur et la nouvelle valeur. LI>
- Mettez à jour les valeurs dans la table principale. LI>
- Mettez à jour les références "Clé étrangère". LI>
- Ré-appliquer les contraintes de clé étrangère sur les tables distantes li>
- ré-appliquer la principale contrainte de clé sur la table d'origine li>
ol>
(Je dois admettre que j'aurais peut-être manqué quelque chose, car ce n'est pas quelque chose que je ferais jamais.) p>
Changer une clé primaire, en particulier celle utilisée dans les relations clés étrangères, ne doit pas être prise à la légère. Le but de ces clés est de maintenir l'intégrité relationnelle. Vous ne devriez pas être dérangé par des lacunes dans la clé ou le manque de séquentialité. Si vous souhaitez un numéro séquentiel, vous pouvez l'ajouter dans une autre colonne. P>
Peut-être que vous devriez modifier votre table enfant FK avec une opération de mise à jour sur la mise à jour de manière à ce que les changements sur la table des parents se reflètent sur la table enfant.
Voir la référence MySQL pour FK's: http://dev.mysql.com/doc/refman/5.1/fr/create- Table-Foreign-Keys.html P>
Plus tard, vous pouvez exécuter ce qui suit: p>
. . Ne changez pas les clés primaires. Le fait qu'il soit utilisé souligne pourquoi vous ne devriez pas le changer.
@Gordonlinoff Et si je dois?
SET FORND_KEY_CHECKS = 0;; Définir étrangers_key_checks = 1; code>