Domanda

Stavo leggendo su RDBMS, e una proprietà di un RDBMS è atomicita. Quindi, se il denaro viene ritirato da un conto e trasferito un'altra, sia la transazione accadrà completamente o no affatto. Non ci sono parziali transazioni. Ma come è in realtà assicurato?

query SQL per lo scenario di cui sopra potrebbe apparire come (I) l'equilibrio set UPDATE accounts = saldo - ammontare DOVE ac_num = 101 (Ii) saldo set UPDATE accounts = saldo + importo WHERE ac_num = 102

Il che non significa assicura atomicità .. Così come in realtà succede?

È stato utile?

Soluzione

Se fai

BEGIN TRANSACTION
UPDATE accounts set balance = balance - amount WHERE ac_num = 101
UPDATE accounts set balance = balance + amount WHERE ac_num = 102
COMMIT TRANSACTION

Il sistema di database scriverà appunti a quanto ha fatto per modifiche sul conto 101. E poi se il lavoro a causa 102 fallirebbe, il RDBMS utilizza quelle note per annullare il lavoro sul 101.

Inoltre, quando ha iniziato a lavorare a causa 101 è prende un blocco sul database, in modo che nessun altro può venire a leggere il aggiornato, ma non i dati impegnati in conto 101. (Un blocco qui è fondamentalmente solo una nota da qualche parte "Sto lavorando qui, non toccare".)

Altri suggerimenti

Per essere atomica, le transazioni hanno bisogno di:

  • Impedire altre operazioni di interferire con le righe sono la scrittura o lettura
  • Assicurarsi che tutti o nessuno dei cambiamenti che l'operazione fa, sarà nel database quando la transazione commit.

In primo luogo si è ottenuta filari bloccaggio che la transazione legge o scrive durante la sua esecuzione.

Secondo uno è fatto in modo che le operazioni scrivono le loro azioni in un log delle transazioni . Questo rende il database in grado di recuperare anche quando il server perde potenza durante una transazione. In questo caso il processo di recupero leggerà il registro, assicurarsi che le transazioni (uncommited) attivi vengono annullati e le modifiche apportate da loro vengono annullate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top