sql >> Database >  >> RDS >> Mysql

MySQL-concurrency, hoe werkt het en moet ik het in mijn applicatie verwerken?

SQL-instructies zijn atomair. Dat wil zeggen, als je zoiets als dit uitvoert:

UPDATE Cars SET Sold = Sold + 1

Niemand kan de Sold . wijzigen variabele tijdens deze verklaring. Het wordt altijd met 1 verhoogd, zelfs als iemand anders dezelfde instructie tegelijkertijd uitvoert.

Het probleem doet zich voor als u uitspraken hebt die van elkaar afhankelijk zijn:

a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;

Tussen deze vragen kan een andere gebruiker de tabel Auto's wijzigen en Verkocht bijwerken. Om dit te voorkomen, verpak je het in een transactie:

BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;

Transacties worden ondersteund door InnoDB, maar niet door MyISAM.




  1. Kan rijen groeperen niet selecteren op created_at

  2. MySQL installeren en laden database op Inno Setup-script

  3. Domeinnaam selecteren uit e-mailadres

  4. MYSQL:Volgnummertabel