ver update tipos tables tablas sirve registros que pesimista para optimista lock for datos bloqueos bloqueo bloqueadas mysql sql select sql-update

update - tipos de bloqueos mysql



¿Funciona el bloqueo de fila ''para actualizar'' también para tablas unidas? (1)

Realizo 2 consultas en una transacción: SELECCIONAR (que contiene la cláusula JOIN) y ACTUALIZAR. Se requiere que los datos en las filas seleccionadas no cambien antes de que se realice la actualización, entonces estoy usando la cláusula FOR UPDATE. Mi pregunta es: ¿el ''para actualizar'' funciona solo para una parte de los datos seleccionados de la tabla especificada en la cláusula FROM o para los datos de las tablas unidas también? Mi DBMS es MySql.


La documentación simplemente dice que el bloqueo está en filas leídas sin excepciones, por lo que debe estar en todos los registros en todas las tablas unidas. Si desea bloquear solo las filas en una de las tablas, puede hacerlo por separado: ''SELECCIONAR 1 FROM tabla de claves DONDE ... PARA ACTUALIZAR''.

Dicho esto, esto no es necesario simplemente para evitar una actualización entre SELECT y UPDATE. El bloqueo de lectura en SELECT ya hace esto. El propósito de FOR UPDATE sería evitar que otra transacción lea las filas y, por lo tanto, causar un punto muerto porque la ACTUALIZACIÓN no se puede aplicar hasta que la otra transacción libere su bloqueo de lectura.