Transação: a menor unidade de trabalho para executar instruções SQL no banco de dados, garantindo que várias instruções SQL na transação sejam todas bem-sucedidas ou todas falhem;
Um negócio completo requer um lote de instruções DML (inserir, atualizar, excluir) para ser concluído em conjunto.As transações estão relacionadas apenas a instruções DML, ou as instruções DML têm transações.
1. Quatro características dos negócios (ACID):
- Atomicidade: Atomicidade, inseparabilidade mínima, garantia de todos os sucessos ou todas as falhas;
- Consistência: Consistência, de um estado consistente para outro estado consistente (quando todas as instruções DML são necessárias para operar, elas devem ter garantia de sucesso ou falha ao mesmo tempo);
- Isolamento: isolamento, várias transações são isoladas umas das outras sem afetar umas às outras;
- Durabilidade: Durabilidade, depois que a transação é confirmada, os dados são persistidos.
2. Use os termos da transação:
- Abra a transação:
Start Transaction;
- Fim da transação:
End Transaction;
- Confirme a transação:
Commit Transaction;
- Reverter a transação:
Rollback Transaction;
3. Instruções relacionadas a assuntos:
- Verifique o status de envio automático:
show variables like '%autocommit%';
- Envio automático de modificação:
set autocommit = 0/1;
- enviar:
commit;
- Rollback:
rollback;
- Salvar ponto de reversão:
savepoint s1;
- Reverter para o ponto de reversão especificado:
rollback to s1;
4. O sinal de início e término da transação:
- Sinalizador de abertura: qualquer instrução DML (inserir, atualizar, excluir) é executada para marcar a abertura da transação;
- Sinal de fim:
- Enviar: Finalização bem-sucedida: sincroniza todos os registros do histórico de operação da instrução DML e os dados do disco rígido subjacente de uma vez;
- Rollback: o fim da falha: limpar todos os registros de histórico de todas as operações de instrução DML.
5. Dados de nível inferior da transação e do banco de dados: Durante o processo de transação, as instruções DML não alteram os dados de nível inferior antes de terminar, mas apenas registram as operações históricas e concluem a gravação na memória. Somente no final da transação, e quando ela terminar com êxito, os dados no arquivo do disco rígido subjacente serão modificados.
6. No Mysql, confirmação e reversão da transação:
- No Mysql, por padrão, a transação é confirmada automaticamente, ou seja, enquanto uma instrução DML é executada, a transação é aberta e a transação é confirmada.
- Depois de usar a
set autocommit = 0;
transação fechada acima , você pode usarcommit;
erollback;
para confirmar e reverter manualmente.
7. Uma das quatro principais características das transações: link de referência de isolamento (isolamento)
Há um certo grau de isolamento entre a transação A e a transação B, e o isolamento tem um nível de isolamento: (4)
- Leia não comprometido: leia não comprometido
- Leia confirmada: leia confirmada
- Leitura repetível: leitura repetível
- Serialização: serializável
1) leia não comprometido
- 事物A和事物B,事物A未提交的数据,事物B可以读取到
- 这里读取到的数据叫做“脏数据”
- 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别
2) leia comprometido
- 事物A和事物B,事物A提交的数据,事物B才能读取到
- 这种隔离级别高于读未提交
- 换句话说,对方事物提交之后的数据,我当前事物才能读取到
- 这种级别可以避免“脏数据”
- 这种隔离级别会导致“不可重复读取”
- Oracle默认隔离级别
3) leitura repetível
- 事务A和事务B,事务A提交之后的数据,事务B读取不到
- 事务B是可重复读取数据
- 这种隔离级别高于读已提交
- 换句话说,对方提交之后的数据,我还是读取不到
- 这种隔离级别可以避免“不可重复读取”,达到可重复读取
- 比如1点和2点读到数据是同一个
- MySQL默认级别
- 虽然可以达到可重复读取,但是会导致“幻像读”
4) serializável
- 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
- 这种隔离级别很少使用,吞吐量太低,用户体验差
- 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发
8. A relação entre nível de isolamento e consistência: