Maison  >  Article  >  base de données  >  Comment implémenter la sécurité des transactions MySQL

Comment implémenter la sécurité des transactions MySQL

PHPz
PHPzavant
2023-05-29 10:04:071258parcourir

Transaction de sécurité des transactions

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 )

Transaction Principe de base

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

Transaction automatique

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

Manuel Le début, le processus et la fin d'une transaction

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
.

Utilisation des transactions

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;

Point de restauration

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

Caractéristiques des transactions

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer