Análise de transação MySQL
1.1 Visão geral da transação
- Transação (transação), uma transação é uma unidade de lógica de negócios completa, não pode ser dividida,
Por exemplo: transferência de conta bancária, transferência da conta A para a conta B, você precisa executar dois extratos de atualização,
Uma atualização aumenta,
Uma atualização é reduzida,
As duas atualizações e sentenças acima são bem-sucedidas e fracassam ao mesmo tempo.
É melhor permitir um sucesso e um fracasso,
Para garantir que as duas instruções DML acima tenham sucesso e falhem ao mesmo tempo, você precisa usar o "mecanismo de transação" do banco de dados
- As instruções relacionadas às transações são apenas linguagem DML, instruções de manipulação de banco de dados, (inserir exclusão de atualização)
Por quê? Como essas declarações estão relacionadas aos "dados" do banco de dados,
A existência de transações é para garantir a integridade e segurança dos dados
- Se todos os negócios precisam apenas de uma linguagem DML, eles ainda precisam de um mecanismo de transação?
Não há necessidade de negócios;
Mas a situação real não é assim, geralmente uma transação, "negócio", requer várias linguagens DML para completar em conjunto
1.2 Princípio da transação
cinco declarações principais do mysql
-
Declaração de consulta de banco de dados DQL
-
Instrução de manipulação de banco de dados DML
-
Linguagem de definição de banco de dados DDL
-
TCL (transação: rollback de confirmação) ponto de salvamento ponto de salvamento
-
DCL: (autorização)
![imagem 20200904084955651](https://s1.ax1x.com/2020/09/04/wFrUpQ.png)
1.3 As características da transação
Quatro características da transação ACID
-
A. ( Atomicidade ) Atomicidade : Uma transação é a menor unidade e não pode ser dividida
-
Consistência C ( consistência ): A transação deve garantir que várias instruções DML tenham êxito ou falhem ao mesmo tempo.
-
Isolamento I ( isolamento ): a transação A deve ter isolamento da transação B equivalente ao segmento
-
D ( durabilidade ): Durabilidade: Durabilidade significa que os dados finais devem ser persistidos no arquivo do disco rígido antes que a transação seja considerada bem-sucedida.
1.4 isolamento de transação
Sobre o isolamento entre transações
Existem níveis de isolamento para o isolamento da transação, que teoricamente incluem quatro:
Na verdade, eles começam em segunda marcha:
- O primeiro nível: leitura não confirmada (leitura não confirmada), a transação atual pode ler a transação não confirmada da outra parte
A leitura de dados não confirmados terá um fenômeno de leituras sujas (leituras sujas estão lendo dados sujos que não foram confirmados pela transação anterior): significa que dados sujos foram lidos
- O segundo nível: ** Read Committed ** Podemos ler os dados enviados pela transação da outra parte
O problema com a leitura confirmada é: leitura não repetível (leitura não repetível é reler os dados enviados da transação anterior)
- O terceiro nível: leituras repetidas (leitura repetível)
Este nível de isolamento resolve: leitura não repetível
Há um problema: os dados lidos são fantasmas
A leitura fantasma (leitura virtual) refere-se à leitura de dados inseridos por outra transação em uma transação, o que resulta em leituras inconsistentes antes e depois.
- O quarto nível (serializável): serialização, leitura serializada resolve todos os problemas,
Desvantagens: baixa eficiência e necessidade de enfileirar as transações
O Oracle começa em segunda marcha por padrão, a leitura foi enviada
Nível de isolamento padrão do Mysql, leitura repetível
1.5 Demo business
A transação Mysql é enviada automaticamente por padrão (o que é envio automático, desde que qualquer instrução DML seja executada, ela será enviada uma vez)
Primeiro, defina o nível de transação de isolamento
1. leia não confirmado (leia não confirmado)
Leia sem compromisso
Abra duas janelas, modifique os dados de uma transação, uma transação pode ser consultada,
Defina o nível de isolamento da transação
definir nível de isolamento de transação global lido não confirmado;
Exibir nível de isolamento do msyql;
selecione @@ global.tx_isolation;
![imagem 20200904085613662](https://s1.ax1x.com/2020/09/04/wFrtfg.png)
Depois de definir o nível de isolamento, saia.
![imagem 20200904085632680](https://s1.ax1x.com/2020/09/04/wFralj.png)
2. leia confirmada (leia confirmada)
Pode ler os dados enviados por outras transações (o nível de isolamento padrão da maioria dos bancos de dados)
3. leitura repetível (leitura repetível)
Nível de isolamento padrão do Mysql
![imagem 20200904085811828](https://s1.ax1x.com/2020/09/04/wFrBmq.png)
Quando definimos o nível de isolamento da conversa atual para leitura repetível, a conversa atual pode ser lida repetidamente, ou seja, o conjunto de resultados de cada leitura é o mesmo. Na verdade, é feito backup de uma cópia dos dados e ocorre o fenômeno da leitura fantasma.
4. serializável
![imagem 20200904085843238](https://s1.ax1x.com/2020/09/04/wFrd6s.png)