La transaction de transaction accède à une unité d'exécution de programme qui peut mettre à jour divers éléments de données dans la base de données
Une transaction comprend toutes les opérations effectuées entre le début de la transaction (début de la transaction) et la fin de la transaction (fin de la transaction )
MySQL permet une gestion unifiée des transactions (moteur de stockage innodb), sauvegarde temporairement les opérations effectuées par l'utilisateur, et ne les met pas directement dans la table de données (mise à jour). résultat avant de continuer.
Les transactions sont généralement soumises automatiquement, ou elles peuvent être soumises manuellement
Lorsque le client envoie une commande SQL (opération d'écriture, ajout, suppression, modification) au serveur, le serveur le fera. synchronise automatiquement le résultat sur le serveur après l'exécution sans attendre les commentaires de l'utilisateur. Table de données
Deux clients, un client exécute les instructions SQL et l'autre client visualise les résultats de l'exécution
Contrôlez les transactions automatiques via des variables
mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ -- 关闭自动事务 set autocommit = off; mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Après la fermeture des transactions automatiques. , un client modifie les données et l'autre client lit les résultats. Le résultat de la modification n'est pas trouvé
Une fois la transaction automatique désactivée, l'utilisateur doit fournir une commande de synchronisation
commit (synchroniser avec les données table, la transaction sera effacée)
rollback rollback (effacer l'opération précédente, pas plus)
-- 客户端A关闭自动事务后操作数据 mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | +----+--------+ 2 rows in set (0.01 sec) mysql> insert into my_class (name) values('四班'); Query OK, 1 row affected (0.00 sec) mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | | 5 | 四班 | +----+--------+ 3 rows in set (0.00 sec) -- 客户端B看不到新增的 四班数据, mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | +----+--------+ 2 rows in set (0.00 sec)
Après que le client A exécute la validation et soumet la transaction, le client B peut voir les nouvelles données
Habituellement, il y a pas besoin de désactiver les transactions automatiques. Lorsque vous devez utiliser des transactions, utilisez des transactions manuelles
nécessitent que l'utilisateur envoie manuellement des instructions d'opération de transaction pour obtenir des
Instructions de transaction manuelles
-- 1、开启事务,从这条语句开始,后面所有的语句都不会直接写入到数据表,保存在事务日志中 start transaction -- 2、事务处理,多个指令构成 -- 3、事务提交,结束事务 commit / rollback
mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | | 5 | 四班 | +----+--------+ 3 rows in set (0.04 sec) mysql> select * from my_student; +----+--------+----------+------+--------+ | id | name | class_id | age | gender | +----+--------+----------+------+--------+ | 1 | 刘备 | 1 | 18 | 2 | | 2 | 李四 | 1 | 19 | 1 | | 3 | 王五 | NULL | 20 | 2 | | 4 | 张飞 | NULL | 21 | 1 | | 5 | 关羽 | NULL | 22 | 2 | | 6 | 曹操 | 1 | 20 | NULL | +----+--------+----------+------+--------+ 6 rows in set (0.00 sec) -- 开启事务 start transaction; -- 执行事务操作,多个修改操作 insert into my_class (name)values ('六班'); insert into my_student (name, class_id, age, gender)values ('司马懿', 6, 26, 1); -- 提交事务 commit; -- 或者回滚操作,所有数据无效清空 rollback;
Lorsqu'il y a une série d'opérations de transaction, et les étapes sont si Si cela réussit, il n'est pas nécessaire de recommencer. Vous pouvez définir une marque (point de restauration) à un certain point. , et puis s'il y a un échec plus tard, vous pouvez revenir à la position de cette marque
-- 增加回滚点 savepoint 回滚点名字; -- 回到回滚点 清空之后所有操作 rollback to 回滚点名字;
Lors d'une transaction, s'il y a plusieurs étapes, vous pouvez définir plusieurs points de restauration
ACID :
Atomicité Une transaction est une unité de travail indivisible, soit toutes sont effectuées, soit aucune n'est effectuée
Transactions de cohérence Il doit s'agir de faire passer la base de données d'un état de cohérence à un autre état de cohérence
Isolement L'exécution d'une transaction ne peut pas être interféré par d'autres transactions. Lors de l'exploitation des données, les données seront verrouillées
Persistance Durabilité Une fois qu'une transaction est soumise, ses modifications dans les données de la base de données sont permanentes
Si un index est utilisé dans l'état , un enregistrement sera isolé ; sinon, grâce à la récupération complète de la table, la table entière sera verrouillée
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!