Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Update, das mehrere Spalten ändert, ist nicht atomar?

PostgreSQL, Oracle und SQL Server behandeln dies allesamt als atomare Operation. Sehen Sie sich die folgende SQL-Fiddle an und wechseln Sie den Server, um das Verhalten der folgenden SQL zu sehen :

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 war das einzige RBDMS, das dies implementierte, wobei beide Spalten nach dem Update denselben Wert enthielten.

Soweit Sie dies lösen würden, würde ich stattdessen die Werte aus der Datenbank ziehen, die Berechnungen innerhalb Ihrer Anwendung durchführen (anstelle Ihrer Update-Anweisung) und dann die Datenbank mit den berechneten Werten aktualisieren. Auf diese Weise können Sie sicherstellen, dass die Berechnung konsistent durchgeführt wird.