Dernier tutorie...login
Dernier tutoriel manuel MySQL
auteur:php.cn  temps de mise à jour:2022-04-15 14:04:12

Transaction MySQL


Transaction MySQL

La transaction MySQL est principalement utilisée pour traiter des données avec des opérations volumineuses et une grande complexité. Par exemple, dans le système de gestion du personnel, si vous supprimez une personne, vous devez supprimer les informations de base de la personne, ainsi que les informations liées à la personne, telles que la boîte aux lettres, les articles, etc. Les instructions d'opération constituent une transaction !

  • Dans MySQL, seules les bases de données ou les tables utilisant le moteur de base de données Innodb prennent en charge les transactions.

  • Le traitement des transactions peut être utilisé pour maintenir l'intégrité de la base de données et garantir que les lots d'instructions SQL sont tous exécutés ou ne sont pas exécutés du tout.

  • Les transactions permettent de gérer les instructions d'insertion, de mise à jour, de suppression

De manière générale, les transactions doivent répondre à 4 conditions (ACID) : Atomicité (également appelée indivisibilité), la cohérence (Cohérence), l'isolement (également appelé indépendance) et la durabilité (Durabilité).

  • Atomicité : toutes les opérations d'une transaction seront soit terminées, soit non terminées, et ne se termineront à aucune étape intermédiaire. Si une erreur se produit lors de l'exécution de la transaction, elle sera restaurée à l'état avant le début de la transaction, comme si la transaction n'avait jamais été exécutée.

  • Cohérence : l'intégrité de la base de données n'est pas compromise avant le début de la transaction et après la fin de la transaction. Cela signifie que les données écrites doivent respecter pleinement toutes les règles prédéfinies, y compris l'exactitude et la concaténation des données, et que la base de données ultérieure peut spontanément accomplir le travail prédéterminé.

  • Isolement : la base de données permet à plusieurs transactions simultanées de lire, d'écrire et de modifier ses données en même temps. L'isolement peut empêcher la corruption des données due à une exécution croisée lorsque plusieurs transactions sont exécutées simultanément. . L'isolement des transactions est divisé en différents niveaux, notamment lecture non validée, lecture validée, lecture répétable et sérialisable.

  • Persistance : Une fois la transaction terminée, la modification des données est permanente et ne sera pas perdue même en cas de panne du système.

Remarque : 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 démarrer explicitement une transaction, vous devez utiliser la commande BEGIN ou START TRANSACTION, ou exécuter la commande SET AUTOCOMMIT=0 pour désactiver l'utilisation de la validation automatique pour la session en cours.

Déclaration de contrôle des transactions :

  • BEGIN ou START TRANSACTION ;

  • COMMIT ; vous pouvez également utiliser COMMIT WORK, mais ils sont équivalents. COMMIT validera la transaction et rendra permanentes toutes les modifications à la base de données ;

  • ROLLBACK ; vous pouvez utiliser ROLLBACK WORK, mais les deux sont équivalents. La restauration mettra fin à la transaction de l'utilisateur et annulera toutes les modifications non validées en cours

     ;
  • Identifiant SAVEPOINT ; SAVEPOINT permet la création d'un point de sauvegarde dans une transaction, et il peut y avoir plusieurs SAVEPOINT dans une transaction

  • RELEASE SAVEPOINT identifiant ; un point de sauvegarde de transaction, lorsqu'il n'y a pas de point de sauvegarde spécifié, l'exécution de cette instruction lèvera une exception

  • identifiant ROLLBACK TO ; restaurer la transaction au point marqué ; 🎜 >

  • 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 pour le traitement des transactions MYSQL :

1. Utilisez BEGIN, ROLLBACK, COMMIT Pour mettre en œuvre

    BEGIN pour démarrer une transaction
  • Annulation de transaction ROLLBACK
  • COMMIT Confirmation de transaction
2. Utilisez SET directement pour modifier le mode de validation automatique de MySQL :

    SET AUTOCOMMIT=0 Autocommit interdit
  • SET AUTOCOMMIT=1 Activer l'autocommit
Test de transaction

mysql> use DEMO;
Database changed
mysql> CREATE TABLE demo_transaction_test( id int(5)) engine=innodb;  # 创建数据表
Query OK, 0 rows affected (0.04 sec)
 mysql> select * from demo_transaction_test;Empty set (0.01 sec)
 mysql> begin;  # 开始事务Query OK, 0 rows affected (0.00 sec)
 mysql> insert into demo_transaction_test value(5);Query OK, 1 rows affected (0.01 sec)
 mysql> insert into demo_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 demo_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 demo_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 demo_transaction_test;   # 因为回滚所以数据没有插入+------+
| id   |
+------+
| 5    |
| 6    |
+------+2 rows in set (0.01 sec)
 mysql>

Utilisation des instances de transaction en PHP

Test MySQL ORDER BY :

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = 'root';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){   
die('连接失败: ' . mysqli_error($conn));}
// 设置编码,防止中文乱码
mysqli_query($conn, "set names utf8");
mysqli_select_db( $conn, 'DEMO' );
mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行
mysqli_begin_transaction($conn); // 开始事务定义 
if(!mysqli_query($conn, "insert into demo_transaction_test (id) values(8)"))
{    mysqli_query($conn, "ROLLBACK");// 判断当执行失败时回滚} 
if(!mysqli_query($conn, "insert into demo_transaction_test (id) values(9)")){   
 mysqli_query($conn, "ROLLBACK");// 判断执行失败时回滚
 }
 mysqli_commit($conn); //执行事务
 mysqli_close($conn);
 ?>

Recommandations de didacticiels vidéo connexes

  • Syntaxe des transactions

  • Concepts de base du traitement des transactions MySQL

  • Commit et rollback des transactions manuelles dans la table de données Mysql