sql >> Databáze >  >> RDS >> Mysql

Je aktualizace MySQL, která mění více sloupců, neatomická?

PostgreSQL, Oracle a SQL Server to všechny považují za atomickou operaci. Podívejte se na následující SQL Fiddle a přepněte server, abyste viděli chování následujícího 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 byl jediný RBDMS, který to implementoval, přičemž oba sloupce po aktualizaci obsahovaly stejnou hodnotu.

Pokud jde o to, jak byste to vyřešili, místo toho bych vytáhl hodnoty z databáze, provedl výpočty uvnitř vaší aplikace (místo vašeho příkazu k aktualizaci) a poté aktualizoval databázi vypočítanými hodnotami. Tímto způsobem můžete zaručit, že výpočet bude proveden konzistentním způsobem.



  1. Nelze přidat ovladač mysql do jboss

  2. Proč je výchozí řazení MySQL latin1_swedish_ci?

  3. Úloha SSIS pro nekonzistentní import počtu sloupců?

  4. Jak vytvořit uživatele s oprávněními superuživatele v PostgreSQL