Respostas:
Contanto que você não COMMIT ou ROLLBACK uma transação, ela ainda está "executando" e potencialmente segurando bloqueios.
Se o seu cliente (aplicativo ou usuário) fechar a conexão com o banco de dados antes de confirmar, todas as transações ainda em execução serão revertidas e encerradas.
Você pode tentar fazer isso sozinho, o que deve ajudá-lo a ter uma ideia de como isso funciona.
Abra duas janelas (abas) no management studio, cada uma delas terá sua própria conexão ao sql.
Agora você pode iniciar uma transação em uma janela, fazer algumas coisas como inserir / atualizar / excluir, mas ainda não confirmar. em seguida, na outra janela, você pode ver como o banco de dados se parece de fora da transação. Dependendo do nível de isolamento, a tabela pode ser bloqueada até que a primeira janela seja confirmada ou você pode (não) ver o que a outra transação fez até agora, etc.
Brinque com os diferentes níveis de isolamento e nenhuma dica de bloqueio para ver como eles afetam os resultados.
Veja também o que acontece quando você lança um erro na transação.
É muito importante entender como tudo isso funciona ou você ficará perplexo com o que o sql faz, muitas vezes.
Diverta-se! GJ.
As transações devem ser executadas completamente ou nunca. A única maneira de completar uma transação é confirmar, qualquer outra forma resultará em uma reversão.
Portanto, se você iniciar e não confirmar, ele será revertido no fechamento da conexão (pois a transação foi interrompida sem ser marcada como concluída).
depende do nível de isolamento da transação incomming.
Quando você abre uma transação, nada é bloqueado por si só. Mas se você executar algumas consultas dentro dessa transação, dependendo do nível de isolamento, algumas linhas, tabelas ou páginas serão bloqueadas e afetarão outras consultas que tentam acessá-las de outras transações.
Exemplo de transação
começar o tran tt
Suas declarações sql
se ocorreu um erro rollback tran tt else commit tran tt
Enquanto você não executou o commit tran tt, os dados não serão alterados
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
não funciona, por exemplo. Consulte stackoverflow.com/questions/1273376/…
Além dos possíveis problemas de bloqueio que você pode causar, você também descobrirá que seus logs de transações começam a crescer, pois não podem ser truncados além do LSN mínimo para uma transação ativa e se você estiver usando o isolamento de instantâneo, seu armazenamento de versão em tempdb aumentará para razões semelhantes.
Você pode usar dbcc opentran
para ver os detalhes da transação aberta mais antiga.
Qualquer transação não realizada deixará o servidor bloqueado e outras consultas não serão executadas no servidor. Você precisa reverter a transação ou confirmá-la. O fechamento do SSMS também encerrará a transação, o que permitirá que outras consultas sejam executadas.
O comportamento não está definido, então você deve definir explicitamente um commit ou rollback:
http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303
"Se o modo auto-commit estiver desabilitado e você fechar a conexão sem explicitamente confirmar ou reverter suas últimas mudanças, então uma operação COMMIT implícita é executada."
Hsqldb faz uma reversão
con.setAutoCommit(false);
stmt.executeUpdate("insert into USER values ('" + insertedUserId + "','Anton','Alaf')");
con.close();
resultado é
2011-11-14 14: 20: 22.519 INFO principal [SqlAutoCommitExample: 55] [AutoCommit ativado = falso] 2011-11-14 14: 20: 22.546 INFO principal [SqlAutoCommitExample: 65] [Encontrou 0 # usuários no banco de dados]