Sobes.tech
Junior — Middle

Quais métodos de bancos de dados garantem proteção contra condições de corrida?

sobes.tech IA

Resposta da IA

Para proteger contra condições de corrida em bases de dados, utilizam-se os seguintes métodos:

  • Transações e bloqueios: as bases de dados aplicam bloqueios ao nível de linha, página ou tabela para evitar alterações simultâneas dos mesmos dados.
  • Isolamento de transações: os níveis de isolamento (Read Uncommitted, Read Committed, Repeatable Read, Serializable) regulam a visibilidade das alterações entre transações, reduzindo a probabilidade de conflitos.
  • Bloqueio otimista: ao atualizar dados, verifica-se se estes mudaram desde a leitura (por exemplo, usando uma versão ou marca temporal). Se mudaram, a operação é revertida.
  • Bloqueio pessimista: os dados são bloqueados imediatamente na leitura para evitar alterações por outras transações.

Exemplo de bloqueio otimista usando a versão do registo:

// Suponha que exista um campo Version na tabela
var entity = dbContext.Entities.Find(id);
var currentVersion = entity.Version;

// Alterar dados
entity.Name = "Novo Nome";

// Ao guardar, verificar se a versão não mudou
try {
    dbContext.SaveChanges();
} catch (DbUpdateConcurrencyException) {
    // Tratamento do conflito — os dados foram alterados por outro processo
}