ホームページ >データベース >mysql チュートリアル >MySQL トランザクション セキュリティを実装する方法

MySQL トランザクション セキュリティを実装する方法

PHPz
PHPz転載
2023-05-29 10:04:071320ブラウズ

トランザクション セキュリティ トランザクション

トランザクション トランザクションは、データベース内のさまざまなデータ項目を更新するプログラム実行ユニットにアクセスします。

トランザクションは、トランザクション (トランザクションの開始) で始まり、トランザクション (トランザクションの終了) 間に実行されるすべての操作は次の要素で構成されます。

トランザクションの基本原則

MySQL ではトランザクションを均一に管理でき (ストレージ エンジン innodb)、ユーザーが実行した操作は一時的に保存されます。データ テーブル (更新) は、ユーザーが結果を確認するまで待ってから続行します

トランザクションは通常自動的に送信されますが、手動で送信することもできます

自動トランザクション

クライアントが SQL を送信するとき サーバーに命令 (書き込み操作、追加、削除、変更) が与えられると、サーバーは実行後にユーザーのフィードバックを待たずに結果をデータ テーブルに自動的に同期します。

2 つのクライアント (1 つのクライアントは SQL コマンドを実行し、別のクライアントは実行結果を表示します)

変数を使用して自動トランザクションを制御

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
-- 关闭自动事务
set autocommit = off;

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

自動トランザクションを閉じた後、1 つのクライアントがデータを変更します。他のクライアントは変更された結果を見ることができません

自動トランザクションがオフになったら、ユーザーは同期コマンドを提供する必要があります

  • コミット送信 (データと同期)テーブルにある場合、トランザクションはクリアされます)

  • rollback ロールバック (以前の操作をクリアします。これ以上は不要です)

-- 客户端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)

クライアント A が送信するコミットを実行した後トランザクションを実行すると、クライアント B は新しいデータを確認できます

通常、自動トランザクションをオフにする必要はありません。トランザクションを使用する必要がある場合は、手動トランザクションを使用してください

手動トランザクション

トランザクションの開始、処理、終了の操作指示はユーザーが手動で行う必要があります実装

手動トランザクション指示

-- 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;

ロールバックポイント

一連のトランザクション操作があり、その手順が成功すれば最初からやり直す必要はなく、ある時点でマーク(ロールバックポイント)を設定しておき、後で失敗した場合に、

-- 增加回滚点
savepoint 回滚点名字;
-- 回到回滚点 清空之后所有操作
rollback to 回滚点名字;

トランザクション中にステップが多くロールバックポイントを複数設定できる場合は、このマークの位置に戻ることができます

トランザクションの特徴

ACID:

  • アトミック性 トランザクションは分割できない作業単位であり、すべてを実行するか、何も実行しないかのどちらかです。

  • 整合性トランザクションは、データベースを 1 つの整合性状態から次の状態に変更する必要があります。別の整合性状態

  • Isolation アイソレーション トランザクションの実行を他のトランザクションが妨害できない データ操作時はデータがロックされる

  • #耐久性 耐久性 トランザクションが送信されると、データベース内のデータの変更は永続的になります。

条件でインデックスが使用されている場合、レコードは分離されます。それ以外の場合は、テーブル全体の取得を通じて行われます。 、テーブル全体がロックされます

以上がMySQL トランザクション セキュリティを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。