SQL Server: instruções x lotes x transações x conexões

10

Minha pergunta é simples: quais são as diferenças / semelhanças / cardinalidades entre

  • Transações
  • Lotes
  • Conexões e
  • Afirmações

no SQL Server?

Pelo que entendi, uma conexão é um único canal de comunicação entre uma instância do SQL Server e um cliente no qual são executadas coleções de instruções agrupadas em lotes. Um lote é mapeado de forma implícita ou explícita para uma ou várias transações. Isso está correto?



fonte

Respostas:

4

Bastante.

Um lote é exatamente isso, um lote de comandos que precisam ser executados. Uma transação é um conjunto de comandos que garantem êxito ou falha total (ou seja, não completam metade dos comandos e depois falham nos demais, se um falhar, todos falharão).

Tanto quanto sei, o SQL Server faz uso do pool de conexões, portanto, não confio na conexão por idéia do cliente.

Cromulento
fonte
1
Então, qual é a cardinalidade entre lote e transação? É possível ter vários lotes por transação? Que tal vice-versa?
1
Tanto quanto sei, é possível ter várias transações por lote, mas não é possível ter vários lotes por transação.
Cromulent
5

Transações e lotes são dois conceitos independentes. Ambos podem ser usados ​​em uma configuração de um para muitos.

Os blocos de transação são uma única "unidade de trabalho", um conceito que o sql comprometido deve funcionar totalmente ou não funcionar. Por exemplo, se você atualizar duas tabelas vinculadas uma à outra; ambos devem ter êxito para que a alteração de dados seja confirmada. [ https://msdn.microsoft.com/en-us/library/ms174377.aspx]

Lote é um conceito da Microsoft. Com as ferramentas criadas pela Microsoft, como sqlcmd e osql, o lote simplesmente garante um único plano de execução. Por exemplo, se você criar uma variável e usá-la fora do lote, a ferramenta gerará um erro. [ https://msdn.microsoft.com/en-us/library/ms188037.aspx]

Portanto, você pode ter vários lotes que atualizam várias tabelas dentro de um bloco de transação. Na medida em que eles não violem planos de execução de lote individuais, isso é.

Além disso, dentro de um lote, você pode ter vários blocos de transações, garantindo a integridade dos dados entre entidades do banco de dados, como tabelas.

Conexão é simplesmente o handshake de comunicação que aprova a execução de consultas no servidor.

Instruções são linhas individuais que formam uma consulta. GO (separador de lote T-Sql) e BEGIN TRANSACTION (ANSI SQL para iniciar um novo bloco de transações) são ambas instruções.

Aamir Mulla
fonte
1

Lotes e transações existem no mesmo nível. Um lote é uma coleção de comandos SQL não relacionados. Uma transação é uma coleção de comandos SQL que operam (no que diz respeito a todos os outros usuários desse banco de dados) como uma instrução.

wolfgangsz
fonte