sql >> Base de Datos >  >> RDS >> Mysql

¿La actualización de MySQL que cambia varias columnas no es atómica?

PostgreSQL, Oracle y SQL Server tratan esto como una operación atómica. Consulte el siguiente SQL Fiddle y cambie el servidor para ver el comportamiento del siguiente 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 fue el único RBDMS que implementa esto con ambas columnas que contienen el mismo valor después de la actualización.

En cuanto a cómo resolvería esto, en su lugar, extraería los valores de la base de datos, haría los cálculos dentro de su aplicación (en lugar de su declaración de actualización) y luego actualizaría la base de datos con los valores calculados. De esta manera puede garantizar que el cálculo se realizará de manera consistente.