[php,mysql]
Ciao a tutti,
mi trovvo in una situazione in cui avrei bisogno sia di effettuare una lock sia di effettuare una transizione.
La tabella su cui fare il lock è in lettura concorrente, in base all'esito della lettura devono essere fatte altre letture più scritture che richiedo una transazione perchè devono avare alla fine diquesta dati coerenti, legati tra loro.
Fino ad ora simulavo la lock table in questo modo:
-stato di partenza: lettura della tabella concorrente (quella a cui dovrei far il lock)
-start transaction
-lettuta/scrittura1
-lettuta/scrittura2
....
-lettuta/scritturaX
Se tutte le operazioni sono andate a buon fine rieseguo la prima lettura della tabella concorrente per verificare che lo stato nel frattempo non sia cambiato,
se uguale allora effetuo la commit altrimenti un rollback.
Quindi simulo la lock table effettuando un secondo controllo per verificare che lo stato sia ancora quello di partenza.
Ci sono strade migliori o comunque più eleganti? Penso che questa strada non sia comunque esente da bug, con il secondo controllo credo di abbassare drasticamente la probabilità che vengano fatte due operazioni contemporanee con lo stesso stato di partenza (situazione che vorrei evitare), ma non non credo che venga annullata completamente la possibilità per come avverrebbe con una lock table.
Grazie

Rispondi quotando