Artigo Diretório
banco de dados MySQLIsolamento de reversão de transação/conceito aberto/instrução php de processamento de nível
MySQL romances
As transações do MySQL são usadas principalmente para processar dados com grande quantidade de operações e alta complexidade.Por exemplo, no sistema de gerenciamento de pessoal, se você excluir uma pessoa, precisará excluir as informações básicas da pessoa e as informações relacionadas à pessoa, como caixas de correio, artigos etc. constituem uma transação!
- As transações são suportadas no MySQL apenas para bancos de dados ou tabelas que usam o mecanismo de banco de dados Innodb.
- O processamento de transações pode ser usado para manter a integridade do banco de dados, garantindo que os lotes de instruções SQL sejam todos executados ou nenhum deles seja executado.
- As transações são usadas para gerenciar instruções de inserção, atualização e exclusão
De um modo geral, as transações devem atender a 4 condições (ACID): Atomicidade (atomicidade), Consistência (estabilidade), Isolamento (isolamento), Durabilidade (confiabilidade)
- 1,Atomicidade das transações:Um conjunto de transações bem-sucedidas ou retiradas.
- 2,estabilidade:Existem dados ilegais (restrições de chave estrangeira e similares) e a transação é retirada.
- 3,Isolamento:As transações são executadas de forma independente.Se o resultado de uma transação afetar outras transações, outras transações serão retiradas.100% de isolamento das transações em detrimento da velocidade.
- 4,confiabilidade:Após a falha de software e hardware, o driver da tabela de dados InnoDB usará o arquivo de log para reconstruí-lo e modificá-lo.Confiabilidade e alta velocidade não podem ter ambos, a opção innodb_flush_log_at_trx_commit determina quando salvar transações no log.
Nas configurações padrão da linha de comando do MySQL, as transações são confirmadas automaticamente, ou seja, a operação COMMIT será executada imediatamente após a execução da instrução SQL.Portanto, para abrir explicitamente uma transação deve-se utilizar o comando BEGIN ou START TRANSACTION, ou executar o comando SET AUTOCOMMIT=0, para desabilitar o uso de commit automático para a sessão atual.
Declaração de controle de transação:
- BEGIN ou START TRANSACTION; iniciar explicitamente uma transação;
- COMMIT; COMMIT WORK também pode ser usado, mas os dois são equivalentes. COMMIT confirma a transação e torna permanentes todas as modificações feitas no banco de dados;
- ROLLBACK; é possível usar ROLLBACK WORK, mas os dois são equivalentes.A reversão encerra a transação do usuário e desfaz todas as modificações não confirmadas em andamento;
- Identificador SAVEPOINT; SAVEPOINT permite criar um ponto de salvamento em uma transação, podendo haver vários SAVEPOINTs em uma transação;
- RELEASE SAVEPOINT identificador; excluir um ponto de salvamento de uma transação, quando não houver um ponto de salvamento especificado, a execução da instrução lançará uma exceção;
- ROLLBACK TO identificador; reverter a transação para o ponto;
- SET TRANSACTION; usado para definir o nível de isolamento da transação. Os níveis de isolamento de transação fornecidos pelo mecanismo de armazenamento InnoDB são READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ e SERIALIZABLE.
Existem dois métodos principais de processamento de transações MYSQL:
1. Use BEGIN, ROLLBACK, COMMIT para alcançar
- INÍCIO iniciar uma transação
- RECUPERAR reversão de transação
- COMPRAR Confirmação de transação
2. Use SET diretamente para alterar o modo de confirmação automática do MySQL:
- DEFINIR AUTOCOMMIT=0 Desativar confirmação automática
- DEFINIR AUTOCOMMIT=1 Ativar confirmação automática
teste de transação
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
Usando instâncias de transação em PHP
Teste do MySQL ORDER BY:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) compartilhou "Isolamento de reversão de transações de banco de dados MySQL/conceito aberto/processamento de nível de instruções PHP", o que é útil para você.
Bem-vindo a compartilhar o link deste artigo:https://www.chenweiliang.com/cwl-494.html
Bem-vindo ao canal Telegram do blog de Chen Weiliang para receber as últimas atualizações!
📚 Este guia contém um valor enorme, 🌟Esta é uma oportunidade rara, não perca! ⏰⌛💨
Compartilhe e curta se gostar!
Seus compartilhamentos e curtidas são nossa motivação contínua!