Suponha que eu tenha uma consulta:
begin tran
-- some other sql code
E então eu esqueço de confirmar ou reverter.
Se outro cliente tentar executar uma consulta, o que acontecerá?
sql-server
transactions
commit
Charbel
fonte
fonte
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.
fonte
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).
fonte
depende do nível de isolamento da transação incomming.
Explicado o isolamento da transação Sql
fonte
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.
fonte
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
fonte
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.fonte
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.
fonte
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
Hsqldb faz uma reversão
resultado é
fonte