Pergunta

Eu estava lendo sobre RDBMS, e uma propriedade de um RDBMS é atomicidade. Então, se o dinheiro é retirado a partir de uma conta de e transferidos para outra, seja a transação vai acontecer completamente ou não em absoluto. Não há nenhuma parcial transações. Mas como é realmente assegurada?

consultas SQL para o cenário acima pode parecer (I) ACTUALIZAÇÃO conjunto equilíbrio accounts = equilíbrio - quantidade ONDE ac_num = 101 (Ii) conjunto ACTUALIZAÇÃO accounts equilíbrio = + equilíbrio quantidade ONDE ac_num = 102

O que não significa Garante atomicity .. Assim como ele realmente acontecer?

Foi útil?

Solução

Se você fizer

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

O sistema de banco de dados irá escrever notas ao que se tem feito por alterações em conta 101. E então se o trabalho por conta 102 falharia, o RDBMS usa essas notas para desfazer o trabalho em 101.

Além disso, quando ele começou a trabalhar por conta 101 é preciso um bloqueio no banco de dados, de modo que ninguém mais pode vir e ler os dados confirmados atualizados, mas não em conta 101. (A trava aqui é basicamente apenas um em algum lugar nota "Estou trabalhando aqui, não toque".)

Outras dicas

Para ser atômica, transações precisar:

  • impede que outras transações de interferir com as linhas que estão escrevendo ou lendo
  • Certifique-se de que todas ou nenhuma das mudanças que as marcas de transação, estará no banco de dados quando os commits transação.

O primeiro é conseguido através bloqueio linhas que a transação lê ou grava durante a sua execução.

Segundo um é feito de modo que as transações escrever suas ações em um transação log . Isso faz com que o banco de dados capaz de recuperar mesmo quando o servidor ficar sem energia durante uma transação. Neste caso, o processo de recuperação vai ler o log, certifique-se de que as operações ativas (uncommited) se abortada e as alterações feitas por eles são cancelados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top