Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida sobre commit e rollback

Olá!

Pelo que entendi da atividade 2 da aula 4, ao setarmos o autoCommit para false e não realizarmos o commit na mão, as mudanças serão descartadas.

Dessa forma, qual é a diferenças entre se fazer o rollback ou apenas não realizar o commit?

Obrigado =')

4 respostas

Fala Murilo, beleza?

Cara desabilitar o autoCommit deveria ser algo obrigatório, isso é extramente perigoso.

Vamos entender o commit e o rollback...

Imagina que você tem uma tabela chamada usuarios_tb e você quer alterar o e-mail do usuário joão daí sem querer você executou um update sem filtro, por exemplo:

update usuarios_tb set email='novoemail@gmail.com';

O comando acima vai atualizar o e-mail de todos os teus usuários da tabela usuarios_tb e daí se o autoCommit estiver habilitado você vai ter cagado toda a sua tabela e não terá como voltar atrás, ou seja, fazer um rollback.

O commit serve para salvar todas as alterações providas de um comando do tipo DML, por exemplo - INSERT, UPDATE e DELETE.

O rollback serve para fazer justamente o contrário do commit, ou seja, ele desfaz as alterações que você fez no banco com os comandos do tipo DML.

Então, voltando ao exemplo citado acima, no caso do autoCommit está desabilitado você poderia facilmente executar um rollback e voltar a tabela usuarios_tb ao que era antes da execução do comando de update e daí em seguida você corrige o seu comando e comita a alteração.

Por exemplo:

update usuarios_tb set email ='novoemail@gmail.com' where usuario_id = 1; 

commit;

Conclusão

Se o commit for executado, você não conseguirá voltar atrás caso tenha feito uma modificação errada.

E se um rollback for executado, você perde todas as alterações que foram feitas e ainda não foram comitadas.

TMJ, bons estudos.

Olá, Leonardo!

Muito obrigado pela resposta!

Entretanto, ainda tenho a seguinte dúvida: Se meu autoCommit estiver como false, e eu não executar o comando commit, qual é a diferença entre eu apenas finalizar a execução ou executar o rollback?

Pelo que entendi nos exemplos dos vídeos e na sua explicação, a mudança na tabela não seria executada em nenhum dos casos.

Obrigado =)

solução!

Opa,

Então se o autoCommit estiver como false, você é obrigado a executar o commit sempre que alterar algo com os comandos - INSERT, DELETE e UPDATE, caso contrário as alterações não serão salvas e daí pode surgir um novo problema que é o lock de tabela...

Como assim lock de tabela?

Se eu executar um INSERT e não der o commit, por exemplo, a tabela vai lockar um sessão para o meu usuário e daí se alguém tentar executar uma operação nessa tabela não vai conseguir porquê eu vou está "lockando" ela.

Então é extramente importante que você lembre de executar o commit ou o rollback ao final de suas operações, caso o autoCommit esteja como false.

Perfeito! Muito obrigado!