Então hoje um professor nos disse que quando o banco de dados tem que fazer uma atualização, internamente (em baixo nível) ele faz um delete e depois um insert com os campos atualizados. Ele então disse que isso é algo feito em todos os bancos de dados e então comecei uma discussão dizendo que achava que não fazia sentido, mas não tinha recursos suficientes para sustentar minha posição. Ele parece saber muito, mas não consigo entender por que dbs faria isso.
Quer dizer, eu sei que se você atualizar um campo e precisar de mais espaço para aquela linha, ele pode excluir a linha fisicamente e colocá-la no final com os novos dados. Mas se, por exemplo, você reduzir o espaço usado, por que excluir e inserir novamente no final?
Isso é mesmo verdade? Quais são os benefícios?
Não, é um detalhe de implementação. Um banco de dados pode implementar uma atualização adequada no local , se assim o desejar.
Dividir uma atualização em uma exclusão seguida por uma inserção geralmente torna a implementação mais simples. Os benefícios colaterais potenciais incluem a capacidade de evitar violações de chave transitórias em um índice exclusivo, classificando adequadamente as operações de exclusão/inserção divididas.
Uma atualização dividida pode ser um pouco mais lenta e gerar mais log do que uma verdadeira atualização in-loco (o que nem sempre é possível).
Como Kin observou em um comentário, se você precisar de um exemplo (para SQL Server), consulte:
Também está relacionado à implementação do MVCC. Na página da Wikipedia sobre MVCC , é mencionado:
Consulte também a página 60 do pdf do PostgreSQL Internals por Bruce Momjian (Postgres usa MVCC): "
UPDATE
é efetivamente umDELETE
e umINSERT
."