Diciamolo hanno tabella la t (i int non nulla, un carbone (1))
inserire nella t selezionano 1, “a„
filettare le edizioni A1 questo:
cominciare la transazione
REGOLARE RIPETIBILE DEL LIVELLO DI ISOLAMENTO DI TRANSAZIONE COLTO
selezionare * a partire dalla t dove i=2
ed allora si siede appena là. Avanti viene il filetto B e le edizioni
selezionare * a partire dalla t dove i=2
aggiornare il a='c stabilito di t in cui i=2
Il primo di queste dichiarazioni della b riuscirà, ma quella seconda attenderà fino al filetto A ha pubblicato commette. Ci è un problema tuttavia: è facile da vedere che la B può ignorare facilmente il cambiamento fatto da A, se si comporta basante su che cosa vede quando ha richiamato la fila. , Per quel motivo è migliore pubblicare
a='c stabilito dell'aggiornamento t dove i=2 e a='a
Ciò verifica efficace che la B stia aggiornando che cosa pensa che stia aggiornando. E questo è esattamente come il cursore cliente-basato sta funzionando, che è il tipo più usuale del cursore utilizzato in odierni strumenti di sviluppo, particolarmente del web: nessuna transazione, nessuna serratura, ma durante la verifica dell'aggiornamento di tutti i campi che sono stati letti e se c'è ne cambi, quindi del messaggio di errore in maniera che un altro utente ha modificato il resultset.
Se volete eliminare questo, quindi dovete pubblicare il livello ancor più restrittivo SERIALIZABLE di isolamento di transazione nel filetto B e non appena leggete le file in A, le aggiornate là usando una certa colonna fittizia appena a questo fine. Allora la B non potrà vedere le file che possono essere modificate da A - che è corretto, perché la B non saprebbe al contrario che queste file ora stanno funzionande sopra dal A. Ma questo naturalmente porta nell'emissione di A che si arresta, andante per il pranzo, ecc, ecc.
Per quel motivo, il cursore cliente-individuato è probabilmente il senso più pratico fare tutto questo, che è perché è oggi il tipo più diffuso di funzionamenti della base di dati.