Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que uma transação em torno de uma única instrução faz?


Não faz nada. Todas as instruções SQL individuais (com raras exceções, como inserções em massa sem log ou truncar tabela) são automaticamente "em uma transação", independentemente de você dizer isso explicitamente ou não.. (mesmo que insiram, atualizem ou excluam milhões de linhas) .

EDIT:com base no comentário de @Phillip abaixo ... Nas versões atuais do SQL Server, Even Bulk Inserts e Truncate Table escrevem algumas dados para o log de transações, embora não tanto quanto outras operações. A distinção crítica de uma perspectiva transacional é que, nesses outros tipos de operações, os dados em suas tabelas de banco de dados que estão sendo modificados não estão no log em um estado que permita sua reversão.

Tudo isso significa que as alterações que a instrução faz nos dados do banco de dados são registradas no log de transações para que possam ser desfeitas se a operação falhar.

A única função que os comandos "Begin Transaction", "Commit Transaction" e "RollBack Transaction" fornecem é permitir que você coloque duas ou mais instruções SQL individuais na mesma transação.

EDIT:(para reforçar o comentário de marcas...) SIM, isso pode ser atribuído a programação "supersticiosa", ou pode ser uma indicação de um mal-entendido fundamental sobre a natureza das transações do banco de dados. Uma interpretação mais caridosa é que é simplesmente o resultado de uma aplicação excessiva de consistência que é inadequada e mais um exemplo do eufemismo de Emerson que:

Uma consistência tola é o duende de mentes pequenas,
adorado por pequenos estadistas, filósofos e teólogos