grazie per avermi risposto, però questa pillola di mchorney l'ho scaricata... ho visitato anche i links,ma non ho saputo districarmi nella valanga di informazioni.
Ti chiedo cortesemente un'esempio lato SQL di come gestire le transazioni perchè al momento questo esempio non mi è chiaro:
In pratica l'inizio della gestione di una transazione è il BEGIN e alla fine di tutte le operazioni SQL dovrei inserire COMMIT?codice:BEGIN; SELECT Qta FROM Prodotti WHERE IdProdotto=123; UPDATE Prodotti SET Qta=Qta-3 WHERE IdProdotto=123; //A questo punto A decide di controllare quanti articoli con IdProdotto=123 sono presenti con una select SELECT Qta FROM Prodotti WHERE IdProdotto=123; A questo punto anche B vuole fare il suo ordine e fa una select per controllare che la quantità di merce di cui necessita sia disponibile: SELECT Qta FROM Prodotti WHERE IdProdotto=123; Se a questo punto B decidesse di fare la seguente update per rendere effettivo il suo ordine: UPDATE Prodotti SET Qta=Qta-8 WHERE IdProdotto=123 (3) Questa (B) verrebbe immediatamente sospesa perché il record in questione è bloccato (A sta eseguendo la transazione avviata col comando BEGIN). Il meccanismo di lock sul record si chiama row level locking. Quindi B deve attendere che il record sia sbloccato e questo avviene quando A invia il comando COMMIT che provoca la scrittura dei dati nel db. A questo punto B può eseguire la query (3) che era stata messa in standby. Infatti se ora facciamo: SELECT Qta FROM Prodotti WHERE IdProdotto=123; Ci verrà ritornato 7 e non più -1.
Grazie per la risposta

Rispondi quotando