Si tengo esta consulta MultiUpdate¿Cuándo exactamente MySQL bloquea una fila al actualizar la tabla InnoDB?
UPDATE user u
INNER JOIN user_profile up ON up.user_id = u.id
SET u.name = 'same_name_i_already_had', up.profile.age = 25
WHERE u.id = 10
Supongamos que la fila 10 en la tabla de usuario ya tiene el nombre 'same_name_i_already_had', por lo que no debería ser actualizado.
Por otro lado, la fila en la tabla user_profile tiene una antigüedad diferente, por lo que MySQL debería actualizarla.
Suponiendo MySQL como RDBMS y InnoDB con su sistema de bloqueo a nivel de fila como el motor de ambas tablas,
¿Bloquea MySQL la fila en la tabla de usuario a pesar de no tener que actualizar el campo de nombre de esa fila ?
Gracias !!
Excelente respuesta, sin embargo, no entiendo los bloqueos de MESA que se muestran. ¿Podrías explicar lo que significa innotop? –
El modo "IX" es un bloqueo de nivel de tabla que significa "I * intención * de bloquear algunas filas en esta tabla". No bloqueará bloqueos a nivel de fila en la misma tabla, pero bloqueará bloqueos a nivel de tabla. Consulte http://dev.mysql.com/doc/refman/5.5/en/innodb-lock-modes.html para obtener una explicación completa del bloqueo de InnoDB y http://innotop.googlecode.com/svn/html/manual. .html para una explicación completa del uso de innotop. –
La mejor respuesta que he tenido. ¡Muchas gracias! –