Capítulo 20. Realizar transacciones

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

20.0 Introducción

El servidor MySQL puede gestionar varios clientes al mismo tiempo porque es multihilo. Para hacer frente a la contención entre clientes, el servidor realiza los bloqueos necesarios para que dos clientes no puedan modificar los mismos datos a la vez. Sin embargo, a medida que el servidor ejecuta sentencias SQL, es muy posible que las sucesivas sentencias recibidas de un determinado cliente se intercalen con sentencias de otros clientes. Si un cliente ejecuta varias sentencias que dependen unas de otras, el hecho de que otros clientes puedan estar actualizando tablas entre esas sentencias puede causar dificultades.

Los fallos en las sentencias también pueden ser problemáticos si una operación con varias sentencias no se ejecuta hasta el final. Supongamos que una tabla flight contiene información sobre los horarios de vuelos de las compañías aéreas, y quieres actualizar la fila del vuelo 578 eligiendo un piloto de entre los disponibles. Podrías hacerlo utilizando tres sentencias como las siguientes:

SET @p_val = (SELECT pilot_id FROM pilot WHERE available = 'yes' LIMIT 1);
UPDATE pilot SET available = 'no' WHERE pilot_id = @p_val;
UPDATE flight SET pilot_id = @p_val WHERE flight_id = 578;

La primera declaración elige a un piloto disponible, la segunda marca al piloto como no disponible y la tercera asigna al piloto al ...

Get Libro de cocina de MySQL, 4ª edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.