Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A atualização do MySQL alterando várias colunas não é atômica?


PostgreSQL, Oracle e SQL Server tratam isso como uma operação atômica. Veja o SQL Fiddle a seguir e alterne o servidor para ver o comportamento do SQL a seguir :
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;

O MySQL foi o único RBDMS que implementou isso com ambas as colunas contendo o mesmo valor após a atualização.

Quanto a como você resolveria isso, eu puxaria os valores do banco de dados, faria os cálculos dentro de seu aplicativo (em vez de sua instrução de atualização) e, em seguida, atualizaria o banco de dados com os valores calculados. Dessa forma, você pode garantir que o cálculo seja realizado de maneira consistente.