Comparação dos quatro níveis de isolamento do MySQL
pré-declaração
Recentemente, estou analisando as perguntas comuns de entrevista do MySQL, então vou registrá-las brevemente.
Comparação de quatro níveis de isolamento
Principalmente para garantir o isolamento no ACID, a consistência é o objetivo.Atomicidade, isolamento e persistência são todos os meios.
nível de isolamento | Leitura Suja | Leitura Fantasma | Leitura não repetível (leitura não repetível) |
---|---|---|---|
Ler não confirmado | pode acontecer | pode acontecer | pode acontecer |
Ler confirmado | não vai acontecer | pode acontecer | pode acontecer |
Leitura repetível | não vai acontecer | pode acontecer | não vai acontecer |
serializável | não vai acontecer | não vai acontecer | não vai acontecer |
Nota: Pode ocorrer indica que o problema pode ocorrer neste nível de isolamento. Não ocorre significa que o problema não ocorre neste nível de isolamento.
Deve-se observar que diferentes níveis de isolamento farão diferentes compensações entre desempenho de simultaneidade e consistência de dados. À medida que o nível de isolamento aumenta, o desempenho de simultaneidade do banco de dados geralmente diminui, mas a consistência dos dados fica mais garantida. A escolha de um nível de isolamento apropriado requer uma compensação com base nas necessidades do aplicativo.
Nível de leitura não confirmado (READ UNCOMMITTED) , a operação de leitura na transação pode ver a modificação da transação não confirmada. Portanto, leituras sujas podem ocorrer. Ao mesmo tempo, como a modificação de outras transações também pode afetar os dados, tanto a leitura fantasma quanto a leitura não repetível podem ocorrer.
Nível de leitura confirmada (READ COMMITTED) , a operação de leitura na transação só pode ver a modificação da transação confirmada. Portanto, leituras sujas não podem ocorrer. No entanto, ainda podem ocorrer leituras fantasmas e não repetíveis.
Nível de leitura repetitiva (REPEATABLE READ) , o nível de isolamento padrão do MySQL. Quando uma operação de leitura em uma transação lê a mesma linha de dados várias vezes na mesma transação, o resultado é sempre consistente, a menos que a própria transação seja modificada. Portanto, leituras não repetíveis não podem ocorrer. No entanto, leituras fantasmas ainda podem ocorrer.
No nível SERIALIZABLE , a ordem de serialização das transações garante o isolamento das transações. Portanto, leituras sujas, leituras fantasmas e leituras não repetíveis são impossíveis. No entanto, há uma sobrecarga de desempenho significativa nesse nível porque uma transação geralmente precisa aguardar a conclusão da transação anterior antes de prosseguir.
três perguntas
-
Leitura Suja: Uma transação lê dados não confirmados de outra transação. Isso pode resultar na leitura de dados inválidos ou inconsistentes.
-
Phantom Read: Quando uma transação lê um intervalo de dados, outra transação insere novos dados no intervalo, fazendo com que a primeira transação encontre novos dados ao reler o intervalo de dados.
-
Leitura não repetível (Non-repeatable Read): Depois que uma transação lê um determinado dado, quando ela lê os dados novamente, descobre que os dados foram modificados ou excluídos por outras transações.