sql >> Base de Datos >  >> RDS >> Mysql

Concurrencia de MySQL, cómo funciona y necesito manejarlo en mi aplicación

Las sentencias SQL son atómicas. Es decir, si ejecuta algo como esto:

UPDATE Cars SET Sold = Sold + 1

Nadie puede cambiar el Sold variable durante esta instrucción. Siempre se incrementa en 1, incluso si alguien más está ejecutando la misma declaración al mismo tiempo.

El problema ocurre si tiene sentencias que dependen unas de otras:

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

Entre estas consultas, otro usuario puede cambiar la tabla Autos y actualizar Vendidos. Para evitar esto, envuélvelo en una transacción:

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

Las transacciones son compatibles con InnoDB, pero no con MyISAM.