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

Comportamiento de 'seleccionar para actualizar' de MySQL

Déjame repasar tus casos y explicarte cómo funcionan estos bloqueos:

1 caso

T1 quiere actualizar algunas filas en su tabla de prueba. Esta transacción pone el bloqueo IX en toda la tabla y el bloqueo X en las primeras 5 filas.

T2 quiere actualizar algunas filas en su tabla de prueba. Esta transacción coloca el bloqueo IX (porque IX es compatible con IX) en todas las tablas e intenta las primeras 5 filas, pero no puede hacerlo porque X no es compatible con X

Así que estamos bien.

caso 2.1

T1 quiere actualizar algunas filas en su tabla de prueba. Esta transacción puso el bloqueo IX en todas las tablas y el bloqueo X en las primeras 5 filas.

T2 quiere seleccionar algunas filas de su tabla de prueba. Y no coloca ningún bloqueo (porque InnoDB proporciona lecturas sin bloqueo)

caso 2.1

T1 quiere actualizar algunas filas en su tabla de prueba. Esta transacción puso el bloqueo IX en todas las tablas y el bloqueo X en las primeras 5 filas.

T2 quiere actualizar (seleccionar para actualizar) algunas filas de su tabla de prueba. Coloque IS en toda la tabla e intente bloquear S en la fila y falla porque X y S no son compatibles.

También tenga siempre en cuenta el nivel de aislamiento:diferentes niveles provocan diferentes mecanismos para liberar/adquirir bloqueos

Espero que ayude