[Lazarus-es] AYUDA, una pregunta sobre TSQLTransaction

Martin Gomez mmgomez en gmail.com
Lun Mayo 18 20:57:31 CEST 2015


2015-05-18 6:34 GMT-03:00 SOCGER .- <socger en hotmail.com>:

> Ahora viene la pregunta del millón:
> ¿Una Transacion abierta obliga al servidor a esperar a la máquina B hasta
> que no termina la transacción de la máquina A?
> O lo que es lo mismo, como la máquina A tiene una transacción que todavía
> no ha hecho un COMMIT, tiene prioridad sobre el resto de máquinas y las
> demás no hacen hada hasta que esta transacción está terminada?
>

​Creo recordar que la lógica de TODOS los motores SQL es que una
transacción en la que haces un UPDATE antes de grabar se fija si su copia
del registro cambió, devolviendole el error al usuario (cada motor a su
manera, supongo)

O sea, si A abre una transacción y está por enviar un UPDATE, y en el
interin B abre una transacción, envía el UPDATE y hace el COMMIT, la
transacción de A se marca como "dirty" y va a fallar a la hora del COMMIT.

​Una alternativa es usar SELECT (blablabla) FOR UPDATE, de esta manera los
registros seleccionados se bloquean para el resto de las transacciones.
Otra: en MySQL se pueden definir distintos niveles de aislamiento para las
transacciones, creo que el que necesitas se llama "SERIALIZABLE" o
"REPEATABLE READ". El manual en linea tiene toda la data sobre eso:
http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html.

Tene presente que en MySQL hay varios motores de almacenamiento, MyISAM no
soporta transacciones, InnoDB si.

Suerte con eso!



-- 
​
Most good programmers do programming not because they expect to get paid or
get adulation by the public, but because it is fun to program.
​ ​
*Linus Torvalds*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150518/0db7247d/attachment-0002.html>


More information about the Lazarus-es mailing list