Directory articoli
Database MySQLIsolamento del rollback della transazione/concetto aperto/istruzione php di elaborazione del livello
MySQL Affari
Le transazioni MySQL vengono utilizzate principalmente per elaborare dati con una grande quantità di operazioni e un'elevata complessità.Ad esempio, nel sistema di gestione del personale, se si elimina una persona, è necessario eliminare sia le informazioni di base della persona che le informazioni relative alla persona, come cassette postali, articoli, ecc. In questo modo, queste istruzioni di funzionamento del database costituire una transazione!
- Le transazioni sono supportate in MySQL solo per database o tabelle che utilizzano il motore di database Innodb.
- L'elaborazione delle transazioni può essere utilizzata per mantenere l'integrità del database, assicurando che i batch di istruzioni SQL vengano eseguiti tutti o nessuna di esse.
- Le transazioni vengono utilizzate per gestire l'inserimento, l'aggiornamento, l'eliminazione di estratti conto
In generale, le transazioni devono soddisfare 4 condizioni (ACID): Atomicità (atomicità), Consistenza (stabilità), Isolamento (isolamento), Durabilità (affidabilità)
- 1,Atomicità delle transazioni:Un insieme di transazioni che hanno esito positivo o negativo.
- 2,stabilità:Sono presenti dati illegali (vincoli di chiavi straniere e simili) e la transazione viene ritirata.
- 3,Isolamento:Le transazioni vengono eseguite in modo indipendente.Se il risultato di una transazione influisce su altre transazioni, le altre transazioni verranno ritirate.Isolamento al 100% delle transazioni, che richiede di sacrificare la velocità.
- 4,affidabilità:Dopo l'arresto anomalo del software e dell'hardware, il driver della tabella dati InnoDB utilizzerà il file di registro per ricostruirlo e modificarlo.Affidabilità e alta velocità non possono avere entrambe, l'opzione innodb_flush_log_at_trx_commit determina quando salvare le transazioni nel registro.
Con le impostazioni predefinite della riga di comando MySQL, le transazioni vengono automaticamente salvate, ovvero l'operazione COMMIT verrà eseguita immediatamente dopo l'esecuzione dell'istruzione SQL.Pertanto, per aprire esplicitamente una transazione è necessario utilizzare il comando BEGIN o START TRANSACTION, oppure eseguire il comando SET AUTOCOMMIT=0, per disabilitare l'utilizzo del commit automatico per la sessione corrente.
Dichiarazione di controllo delle transazioni:
- BEGIN o START TRANSACTION, avviare esplicitamente una transazione;
- COMMIT; È possibile utilizzare anche COMMIT WORK, ma i due sono equivalenti. COMMIT impegna la transazione e rende permanenti tutte le modifiche apportate al database;
- ROLLBACK; è possibile utilizzare ROLLBACK WORK, ma i due sono equivalenti.Il rollback termina la transazione dell'utente e annulla tutte le modifiche non confermate in corso;
- Identificatore SAVEPOINT: SAVEPOINT consente di creare un punto di salvataggio in una transazione e possono esserci più SAVEPOINT in una transazione;
- Identificatore RELEASE SAVEPOINT; elimina un punto di salvataggio di una transazione, quando non esiste un punto di salvataggio specificato, l'esecuzione dell'istruzione genererà un'eccezione;
- ROLLBACK TO identificatore; riporta la transazione al punto;
- SET TRANSACTION; utilizzato per impostare il livello di isolamento della transazione. I livelli di isolamento delle transazioni forniti dal motore di archiviazione InnoDB sono READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ e SERIALIZABLE.
Esistono due metodi principali di elaborazione delle transazioni MySQL:
1. Usa BEGIN, ROLLBACK, COMMIT per ottenere
- INIZIO avviare una transazione
- RITORNO ripristino delle transazioni
- COMMETTERE conferma della transazione
2. Usa SET direttamente per cambiare la modalità di commit automatico di MySQL:
- IMPOSTA AUTOCOMMIT=0 Disabilita il commit automatico
- IMPOSTA AUTOCOMMIT=1 Attiva il commit automatico
prova di transazione
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>
Utilizzo di istanze di transazione in PHP
MySQL ORDINE PER test:
<? 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); ?>
Speranza Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ha condiviso "Isolamento rollback transazione database MySQL/Concetto aperto/Elaborazione a livello di istruzioni PHP", che è utile per te.
Benvenuti a condividere il link di questo articolo:https://www.chenweiliang.com/cwl-494.html
Benvenuto nel canale Telegram del blog di Chen Weiliang per ricevere gli ultimi aggiornamenti!
📚 Questa guida contiene un valore enorme, 🌟Questa è un'opportunità rara, non perderla! ⏰⌛💨
Condividi e metti mi piace se ti va!
La tua condivisione e i tuoi like sono la nostra continua motivazione!