MySQL: mise à jour d'un champ uniquement si la condition est remplie
Est-il possible de faire une mise à JOUR de la requête MySQL qui met à jour la valeur du champ seulement si certaines conditions sont remplies? Quelque chose comme ceci:
UPDATE test
SET
CASE
WHEN true
THEN field = 1
END
WHERE id = 123
En d'autres termes:
UPDATE test
SET
something = 1, /*field that always gets updated*/
CASE
WHEN true
THEN field = 1 /*field that should only get updated when condition is met*/
END
WHERE id = 123
Quelle est la bonne façon de le faire?
- La seule raison de cas d'utilisation dans la requête de mise à jour est que si vous voulez mettre à jour les lignes différemment en fonction d'une condition. Si vous voulez juste de mettre à jour certaines lignes, il suffit d'ajouter les conditions de la clause where.
Vous devez vous connecter pour publier un commentaire.
Oui!
Vous avez ici un autre exemple:
Cela fonctionne car MySQL ne fait pas de mise à jour de la ligne, si il n'y a pas de changement, comme indiqué dans les docs:
WHERE currency=1
?WHEN
dans unUPDATE
requête.TIMESTAMP
colonnes.ELSE final_price
. De ce fait, les lignes oùcurrency!=1
à faire le vide. Les valeurs d'origine, quels qu'ils soient, ont été effacés. Espérons que cela est utile.Une autre solution qui, à mon avis, est plus facile à lire serait:
Ce que ce n'est réglé "champ" à 1 (comme OP utilisé comme exemple) si la condition est remplie et utiliser la valeur actuelle de 'champ' si pas satisfait. Utilisation de la valeur précédente est la même chose que de ne pas changer, donc là vous allez.
Essayez ceci:
condition
?Une autre solution, nous pouvons utiliser MySQL
IF()
conditionnelle fonction :UPDATE servers SET port = IF(port != 21, 22, port) WHERE `id` = 123;
dans mon cas, je veux mettre ssh port 22 si non seulement de 21 port telnet laissent 22Une autre variation:
Cela permettra de mettre à jour le
field
avec{new value}
seulement si{condition}
est rencontré