[Db] contatore server side

Marcello Vezzelli marcello a vezz.it
Mer 3 Gen 2007 12:36:59 CET


Domenico L. wrote:
>
>> Ma fare una lock table in questi casi serve a qualcosa o è una 
>> bestialità?
> No mysql 5 ha il lock a livello di riga quindi tutto bene.


>
> Mi lascia un po' da pensare il concetto che è possibile cancellare 
> l'ultima, in un ambiente concorrente il concetto di ultima è una cosa 
> che non ci si può permettere di avere.

Supponiamo che la transazione che si occupa di cancellare l'ultima 
fattura faccia una lock table... consideriamo la cancellazione 
dell'ultima fattura un evento raro e va bene gestirlo in questo modo.

Se qualcuno posta durante la cancellazione, si becca un errore del tipo 
"table locked" e fa il rollback. Corretto?
Gestendo la cosa lato applicativo, si aspetta un attimino e si riprova. 
Parliamo veramente di centesimi di secondo, ma la questione è 
concettuale quindi vale la pena discuterne... supponiamo che la 
cancellazione di un record duri un tempo lungo a sufficienza.
Finita la transazione della cancellazione, il nuovo post otterrà 
correttamente il valore numfatt facendo una select dell'ultimo numero di 
fattura in tabella incrementato di uno.
Domandone: da quanto ho letto, l'esecuzione del trigger BEFORE INSERT è 
atomica su ogni tabella, corretto? Ovvero il trigger gira fuori da 
qualsiasi transazione, quindi sono tutti sequenziali.
>
> Anche perché potrebbe diventare l'ultima di un utente... ma qui stiamo 
> di fatto introducendo una soluzione (peraltro già vista in software di 
> fatturazione) che le fatture vengono inserite e successivamente (dopo 
> x giorni o manualemente) convalidate, quindi gli si assegna il numero.
>
> Ora se loro vogliono questo, ferma tutto, perché l'approccio è ben 
> diverso, altrimenti dopo proseguo ;-)

Ma non si sposta il problema e basta? Se dopo che l'ho convalidata la 
voglio cancellare siamo da capo...
E' come dire che la vita sulla Terra veniva da Marte. E quella su Marte? :D

Ciao
Marcello





Maggiori informazioni sulla lista Db