PostgreSQL、Oracle、およびSQL Serverはすべて、これを不可分操作として扱います。 次のSQLフィドルを参照し、サーバーを切り替えて次のSQLの動作を確認してください> :
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は、更新後に同じ値を含む両方の列でこれを実装する唯一のRBDMSでした。
これをどのように解決するかについては、代わりにデータベースから値を取得し、(updateステートメントではなく)アプリケーション内で計算を行ってから、計算された値でデータベースを更新します。このようにして、計算が一貫した方法で実行されることを保証できます。