Mysql
 sql >> Base de données >  >> RDS >> Mysql

Concurrence MySQL, comment ça marche et dois-je le gérer dans mon application

Les instructions SQL sont atomiques. Autrement dit, si vous exécutez quelque chose comme ceci :

UPDATE Cars SET Sold = Sold + 1

Personne ne peut modifier le Sold variable lors de cette instruction. Il est toujours incrémenté de 1, même si quelqu'un d'autre exécute la même instruction simultanément.

Le problème se produit si vous avez des instructions qui dépendent les unes des autres :

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

Entre ces requêtes, un autre utilisateur peut modifier la table Cars et mettre à jour Vendu. Pour éviter cela, encapsulez-le dans une transaction :

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

Les transactions sont prises en charge par InnoDB, mais pas par MyISAM.