sql >> Database >  >> RDS >> Mysql

MySQL-update wijzigen van meerdere kolommen is niet-atomair?

PostgreSQL, Oracle en SQL Server behandelen dit allemaal als een atomaire operatie. Zie de volgende SQL Fiddle en verander de server om het gedrag van de volgende SQL te zien :

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 was de enige RBDMS die dit implementeerde waarbij beide kolommen na de update dezelfde waarde bevatten.

Wat betreft hoe u dit zou oplossen, zou ik in plaats daarvan de waarden uit de database halen, de berekeningen in uw toepassing uitvoeren (in plaats van uw update-instructie) en vervolgens de database bijwerken met de berekende waarden. Op deze manier kunt u garanderen dat de berekening op een consistente manier wordt uitgevoerd.



  1. Hoe de ORACLE_HOME-variabele correct instellen op Ubuntu 9.x?

  2. Hoe een resultatenset / cursor retourneren van een Oracle PL/SQL anoniem blok dat Dynamic SQL uitvoert?

  3. 4 manieren om rijen te vinden die hoofdletters bevatten in PostgreSQL

  4. Datum van Excel verandert bij uploaden naar mysql