ホームページ >データベース >mysql チュートリアル >MySQL トランザクション セキュリティを実装する方法
トランザクション トランザクションは、データベース内のさまざまなデータ項目を更新するプログラム実行ユニットにアクセスします。
トランザクションは、トランザクション (トランザクションの開始) で始まり、トランザクション (トランザクションの終了) 間に実行されるすべての操作は次の要素で構成されます。
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 サイトの他の関連記事を参照してください。