Mysql
 sql >> Base de données >  >> RDS >> Mysql

La mise à jour de MySQL modifiant plusieurs colonnes n'est pas atomique ?

PostgreSQL, Oracle et SQL Server traitent tous cela comme une opération atomique. Consultez le SQL Fiddle suivant et changez de serveur pour voir le comportement du SQL suivant :

CREATE TABLE Swap (
  a CHAR(1),
  b CHAR(1)
);

INSERT INTO Swap (a, b) VALUES ('a', 'b');

UPDATE Swap SET a = b, b = a;

SELECT * FROM Swap;

MySQL était le seul RBDMS qui implémentait cela avec les deux colonnes contenant la même valeur après la mise à jour.

En ce qui concerne la façon dont vous résoudriez cela, je tirerais plutôt les valeurs de la base de données, effectuerais les calculs à l'intérieur de votre application (au lieu de votre instruction de mise à jour), puis mettrais à jour la base de données avec les valeurs calculées. De cette façon, vous pouvez garantir que le calcul sera effectué de manière cohérente.