Holas
Estoy usando MySQL 4.0.10 con tablas InnoDB y tengo un problema al usar
transacciones, se bloquea toda la tabla. Por ejemplo, el servidor esta en
modo 'transaction isolation level serializable' y tengo un tabla T1 con dos
campos de caracter: 'codigo' y 'data'.
Abro una ventana del cliente MySQL en modo texto y tipeo:
begin;
select * from T1 where codigo = '1';
->devuelve |1|aaaaa|
update T1 set data = 'bbbbb' where codigo = '1';
->lo hace
select * from T1 where codigo = '1';
->devuelve |1|bbbbb|
Abro una segunda ventana y tipeo
select * from T1 where codigo = '1';
->se bloquea hasta que da el time out, esta correcto (la fila esta
->ocupada con una transaccion pendiente
select * from T1 where codigo = '2';
->SE QUEDA BLOQUEADO!!!, hasta que sale el time out
Por que se queda bloqueado si se supone que InnoDB maneja bloqueos a nivel
de fila (row locking)???!
Hasta que no doy COMMIT o ROLLBACK en la primera ventana, no se puede hacer
nada con la tabla, ni UPDATE ni INSERT ni nada.
Hay alguna opcion que debe activarse para tener bloqueos por fila con
InnoDB? El archivo de configuracion tiene habilitados todos los sets tipo
'innodb_%' tal como dice la documentacion.
Gracias por cualquier sugerencia
| Thread |
|---|
| • Bloqueos de tabla con InnoDB | Alvaro Jimenez | 8 May |