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.