Répertoire d'articles
Base de données MySQLInstruction php d'isolation de restauration de transaction/concept ouvert/niveau de traitement
MySQL Affaires
Les transactions MySQL sont principalement utilisées pour traiter des données avec un grand nombre d'opérations et une grande complexité.Par exemple, dans le système de gestion du personnel, si vous supprimez une personne, vous devez supprimer à la fois les informations de base de la personne et les informations liées à la personne, telles que les boîtes aux lettres, les articles, etc. De cette manière, ces instructions de fonctionnement de la base de données constituent une transaction !
- Les transactions sont prises en charge dans MySQL uniquement pour les bases de données ou les tables qui utilisent le moteur de base de données Innodb.
- Le traitement des transactions peut être utilisé pour maintenir l'intégrité de la base de données, en veillant à ce que les lots d'instructions SQL soient tous exécutés ou qu'aucun d'entre eux ne soit exécuté.
- Les transactions sont utilisées pour gérer l'insertion, la mise à jour, la suppression des relevés
De manière générale, les transactions doivent répondre à 4 conditions (ACID) : Atomicité (atomicité), Cohérence (stabilité), Isolation (isolement), Durabilité (fiabilité)
- 1,Atomicité des transactions :Un ensemble de transactions qui réussissent ou se retirent.
- 2,la stabilité:Il y a des données illégales (contraintes de clé étrangère et autres) et la transaction est retirée.
- 3,Isolation:Les transactions s'exécutent indépendamment.Si le résultat d'une transaction affecte d'autres transactions, alors d'autres transactions seront retirées.Isolation à 100% des transactions, ce qui nécessite de sacrifier la vitesse.
- 4,fiabilité:Après le crash logiciel et matériel, le pilote de table de données InnoDB utilisera le fichier journal pour le reconstruire et le modifier.La fiabilité et la haute vitesse ne peuvent pas avoir les deux, l'option innodb_flush_log_at_trx_commit détermine quand enregistrer les transactions dans le journal.
Sous les paramètres par défaut de la ligne de commande MySQL, les transactions sont automatiquement validées, c'est-à-dire que l'opération COMMIT sera exécutée immédiatement après l'exécution de l'instruction SQL.Par conséquent, pour ouvrir explicitement une transaction, il faut utiliser la commande BEGIN ou START TRANSACTION, ou exécuter la commande SET AUTOCOMMIT=0, afin de désactiver l'utilisation de la validation automatique pour la session en cours.
Déclaration de contrôle des transactions :
- BEGIN ou START TRANSACTION ; démarrer explicitement une transaction ;
- COMMIT ; COMMIT WORK peut également être utilisé, mais les deux sont équivalents. COMMIT valide la transaction et rend permanentes toutes les modifications apportées à la base de données ;
- ROLLBACK ; il est possible d'utiliser ROLLBACK WORK, mais les deux sont équivalents.La restauration met fin à la transaction de l'utilisateur et annule toutes les modifications non validées en cours ;
- Identifiant SAVEPOINT ; SAVEPOINT permet de créer un point de sauvegarde dans une transaction, et il peut y avoir plusieurs SAVEPOINT dans une transaction ;
- RELEASE SAVEPOINT identifiant ; supprimer un point de sauvegarde d'une transaction, lorsqu'il n'y a pas de point de sauvegarde spécifié, l'exécution de l'instruction lèvera une exception ;
- Identificateur ROLLBACK TO ; restaurer la transaction jusqu'au point ;
- SET TRANSACTION ; utilisé pour définir le niveau d'isolement de la transaction. Les niveaux d'isolement des transactions fournis par le moteur de stockage InnoDB sont READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ et SERIALIZABLE.
Il existe deux méthodes principales de traitement des transactions MYSQL :
1. Utilisez BEGIN, ROLLBACK, COMMIT pour atteindre
- COMMENCER commencer une transaction
- RETOUR EN ARRIERE restauration des transactions
- COMMETTRE Confirmation de transaction
2. Utilisez SET directement pour changer le mode de validation automatique de MySQL :
- DÉFINIR AUTOCOMMIT=0 Désactiver la validation automatique
- DÉFINIR AUTOCOMMIT=1 Activer la validation automatique
essai de transactions
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>
Utilisation des instances de transaction en PHP
Test ORDRE PAR MySQL :
<? 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); ?>
J'espère que le blog de Chen Weiliang ( https://www.chenweiliang.com/ ) a partagé "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements", qui vous est utile.
Bienvenue à partager le lien de cet article :https://www.chenweiliang.com/cwl-494.html
Bienvenue sur la chaîne Telegram du blog de Chen Weiliang pour obtenir les dernières mises à jour !
📚 Ce guide contient une valeur énorme, 🌟C'est une opportunité rare, ne la manquez pas ! ⏰⌛💨
Partagez et likez si vous aimez !
Vos partages et likes sont notre motivation continue !