Tengo un problema extraño (al menos para mí :)) con la facilidad de bloqueo de MySQL.Mysql SELECCIONAR PARA ACTUALIZAR - extraño problema
Tengo una tabla:
create table `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
Con estos datos:
+ ---- +
| id |
+ ---- +
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 10 |
| 11 |
| 12 |
+ ---- +
Ahora tengo 2 clientes con estos comandos ejecutados por el principio:
conjunto de confirmación automática = 0;
establece el nivel de aislamiento de la transacción de sesión serializable;
begin;
Ahora la parte más interesante. El primer cliente ejecuta esta consulta: (hace un intento de insertar una fila con id igual a 9)
SELECCIONE * de la prueba donde id = 9 PARA ACTUALIZAR;
Empty set (0.00 sec)
A continuación, el segundo cliente hace lo mismo:
SELECT * de prueba en la que id = 9 FOR UPDATE;
Empty set (0.00 sec)
Mi pregunta es: ¿Por qué el segundo cliente no bloquea? La primera consulta debe haber configurado un bloqueo de espacio exclusivo porque FOR UPDATE se ha utilizado y el segundo cliente debería bloquearse.
Si me equivoco, ¿podría alguien decirme cómo hacerlo correctamente?
La versión de MySQL que uso es: 5.1.37-1ubuntu5.1
No bloquea porque ha bloqueado correctamente ** filas **. – Pacerier