J'ai une table où chaque ligne est numérotée avec un index unique (1,2,3, ...). Je souhaite augmenter l'indice de chaque entrée de 4, afin de faire de la place pour quatre nouvelles entrées au début (index 1,2,3 et 4).
J'ai essayé d'utiliser: p>
UPDATE table SET key_index = key_index + 4;
3 Réponses :
Cela peut être délicat. Un astuce que j'utilise est deux mises à jour - d'abord à une gamme de valeurs «sûre». Deuxièmement aux valeurs souhaitées: Vous pouvez également déposer l'index / contrainte unique - ou le désactiver dans certaines bases de données. P> P>
Merci! Une solution super simple et efficace!
Si vous exécutez MySQL, vous pouvez utiliser une simple mise à jour code> code>, avec une clause code> par code> qui trie les lignes par la valeur décroissante. Cela vous permet d'effectuer les modifications de une seule requête, sans aucun risque de collision (car vos valeurs sont uniques).
mySQL prend en charge Si une instruction CODE> UPDATE CODE> comprend une clause code> par code>, les lignes sont mises à jour dans l'ordre spécifié par la clause. Cela peut être utile dans certaines situations qui pourraient autrement entraîner une erreur. P>
blockQuote> La documentation continue avec un exemple qui ressemble à votre cas d'utilisation. p> donc: p> commander par code> dans les instructions de mise à jour, et le comportement est
create table mytable (key_index int);
insert into mytable values (1), (4), (5), (8), (9);
update mytable
set key_index = key_index + 4
order by key_index desc;
select * from mytable;
| key_index |
| --------- |
| 5 |
| 8 |
| 9 |
| 12 |
| 13 |
Gordon a répondu au point. Mais si vous mettez à jour le Key_index, n'oubliez pas de mettre à jour la valeur dans les tables de référence étrangère (le cas échéant).
Alternativement, vous pouvez essayer une autre approche. Ajoutez une autre colonne Dites DUP_KEY_INDEX CODE> avec valeur sous forme
Key_index + 4 code>. Puis déposez la colonne
Key_index CODE> et renommez cette nouvelle colonne
DUP_KEY_IDEX CODE> comme
Key_index CODE> Colonne. P>
update TABLE_NAME set key_index = key_index + 4;
Quelle base de données utilisez-vous?
J'utilise mysql