Hoje, um professor nos disse que, quando o banco de dados precisa fazer uma atualização, internamente (em nível baixo), ele exclui e depois insere os campos atualizados. Ele então disse que isso é algo feito em todos os bancos de dados e, em seguida, iniciei uma discussão dizendo que achava que não fazia sentido, mas que não tinha recursos suficientes para apoiar minha posição. Ele parece saber muito, mas não consigo entender por que dbs faria isso.
Quero dizer, eu sei que se você atualizar um campo e precisar de mais espaço para essa linha, ele poderá excluir a linha fisicamente e colocá-la no final com os novos dados. Mas se, por exemplo, você reduz o espaço usado, por que o excluiria e o inseriria novamente no final?
Isso é verdade? Quais são os benefícios?
fonte
Respostas:
Não, é um detalhe de implementação. Um banco de dados pode implementar uma atualização adequada no lugar se ele 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 transitórias de chave em um índice exclusivo, classificando adequadamente as operações de exclusão / inserção de divisão.
Uma atualização dividida pode ser um pouco mais lenta e gerar mais log do que uma atualização verdadeira no local (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:
Veja também a página 60 do pdf do PostgreSQL Internals por Bruce Momjian (o Postgres usa MVCC): "
UPDATE
é efetivamente umDELETE
e umINSERT
".fonte