sql >> Databasteknik >  >> RDS >> Mysql

MySQL-uppdatering ändra flera kolumner är icke-atomär?

PostgreSQL, Oracle och SQL Server behandlar alla detta som en atomoperation. Se följande SQL Fiddle och byt server för att se beteendet hos följande 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 var det enda RBDMS som implementerade detta med båda kolumnerna innehållande samma värde efter uppdateringen.

När det gäller hur du skulle lösa detta, skulle jag istället hämta värdena från databasen, göra beräkningarna inuti din applikation (istället för din uppdateringssats) och sedan uppdatera databasen med de beräknade värdena. På så sätt kan du garantera att beräkningen kommer att utföras på ett konsekvent sätt.



  1. Hur får man genererade nycklar från JDBC batchinlägg i Oracle?

  2. När måste jag stänga mysqli (Databas) anslutning?

  3. lägga till 1 dag till ett DATETIME-formatvärde

  4. AVG() Funktion i MariaDB