0
votes

Comment modifier la commande de mise à jour lors de l'utilisation de l'instruction SQL UPDATE?

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;


2 commentaires

Quelle base de données utilisez-vous?


J'utilise mysql


3 Réponses :


1
votes

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: xxx

Vous pouvez également déposer l'index / contrainte unique - ou le désactiver dans certaines bases de données.


1 commentaires

Merci! Une solution super simple et efficace!



0
votes

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 commander par code> dans les instructions de mise à jour, et le comportement est décrit dans la documentation P>

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> xxx pré>

Démo sur DB Fiddle Strong>: P>

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        |


0 commentaires

0
votes

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>

SQL FIDDLE Démo P>

update TABLE_NAME set key_index = key_index + 4;


0 commentaires