Mysql
 sql >> Database >  >> RDS >> Mysql

L'aggiornamento di MySQL che modifica più colonne non è atomico?

PostgreSQL, Oracle e SQL Server trattano tutti questo come un'operazione atomica. Vedi il seguente SQL Fiddle e cambia il server per vedere il comportamento del seguente 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 è stato l'unico RBDMS a implementarlo con entrambe le colonne contenenti lo stesso valore dopo l'aggiornamento.

Per quanto riguarda il modo in cui risolveresti il ​​problema, estrarrei invece i valori dal database, eseguirò i calcoli all'interno della tua applicazione (invece della tua dichiarazione di aggiornamento) e quindi aggiornerei il database con i valori calcolati. In questo modo puoi garantire che il calcolo verrà eseguito in modo coerente.