MySQL permite bloquear tablas para que diversas queries puedan ejecutarse al mismo tiempo sin distorsionar sus resultados. Este bloqueo puede ser de escritura o de lectura. Después de realizar el bloqueo hay que realizar un desbloqueo, como es lógico.
Para usar LOCK TABLES en MySQL se necesita el privilegio global LOCK TABLES y el privilegio SELECT en las tablas involucradas.
Ahora voy a poner la sintaxis para cada tipo de bloqueo:
-
Bloqueo por escritura:LOCK TABLES WRITE
LOCK TABLES tbl_contador WRITE;
UPDATE tbl_contador SET valor = valor + 1; //incrementar el contador
SELECT valor FROM contador; //retornar el contador asignado
UNLOCK TABLES;
-
Bloqueo por lectura:LOCK TABLES READ
LOCK TABLES trans READ;
SELECT SUM(value) FROM trans WHERE customer_id=some_id;
UPDATE customer SET total_value=sum_from_previous_statement
WHERE customer_id=some_id;
UNLOCK TABLES;
Sólo se debe usar el bloqueo LOW_PRIORITY WRITE si se está seguro de que existirá un tiempo en el que no habrá hilos que pidan un bloqueo READ.