Nós vimos que no controle das transações que precisamos executar nas aplicações, os níveis de isolamento possuem um papel importante. Então, vamos nos aprofundar neste conceito. Vamos lá. Então, vamos primeiro observar que a ausência de isolamento entre transações pode nos ocasionar alguns problemas. Primeiro problema, a leitura suja ou dirty read. Então, aqui nós temos um cenário onde uma transação, transação A, está atualizando um registro e não dá comit, ou seja, não confirma as alterações que estão sendo realizadas. Então, caso o sistema gerenciador de banco de dados permita que a outra transação, ou seja, a transação B, faça a leitura destes dados e estes dados sejam lidos antes da confirmação de A, nós temos caracterizado uma leitura suja. Então, vamos imaginar que caso a transação A não confirme as operações e a transação B já tenha sido executada fazendo essa leitura suja, e após isso a transação A é cancelada, dá rollback, nós tivemos a transação B executada de uma maneira inconsistente, com dados sujos. Segundo problema que pode acontecer é a leitura irrepetível, ou leitura não repetível. Non-repeatable read. Então, aqui é o cenário onde nós temos leituras consecutivas dentro de uma mesma transação que vão recuperar resultados diferentes quando, no meio do caminho entre essas duas operações, é permitido que outra transação faça atualizações. Então, isso é uma leitura não repetível ou irrepetível. Terceiro problema que pode acontecer são as leituras fantasma, phantom read. Então, também temos o cenário onde a transação A faz duas leituras de uma mesma consulta, enquanto a transação B está inserindo ou excluindo registros. E ainda nós temos a alteração no número de linhas recuperadas pela transação A em sua segunda leitura. Então, a diferença aqui em relação ao não repetível é que nós temos alteração na quantidade de registros. E para resolver os problemas com os níveis de isolamento, nós vamos ter essa escala com quatro passos. quatro passos. Do lado esquerdo nós vamos começar com a leitura não confirmada ou o Read Uncommitted, que na nossa escala é justamente o isolamento ausente. Não há nenhum tipo de isolamento. Então é permitido as transações lerem dados que não são confirmados de outras transações. Ou seja, lê sem ter commit. E, consequentemente, não resolve nenhum dos possíveis problemas da ausência de isolamento. A segunda possibilidade é a leitura confirmada ou read committed, que já vai nos trazer um certo isolamento, isolamento aqui classificado como baixo, e resolve apenas a leitura suja. Então, as transações podem ler somente dados confirmados, dados comitados, dados com comit. Terceira possibilidade é a leitura repetível, repeatable read, e aqui nós vamos ter um isolamento mediano ou intermediário, não resolve a leitura fantasma, mas já resolveu a leitura suja. O recurso é bloqueado durante a transação. E aqui nós vamos perceber que é um modo padrão de isolamento em muitos bancos de dados populares. E a quarta possibilidade é o serializável, ou serializable, que é o nível maior com alto isolamento, resolve os três problemas citados e aqui nós temos a sensação de que as transações concorrentes são executadas em uma ordem, são executadas em série.