Mysqlトランザクション[概要]

トランザクション:データベースでSQLステートメントを実行するための最小の作業単位。トランザクション内の複数のSQLステートメントがすべて成功または失敗することを保証します。

完全なビジネスでは、DML(挿入、更新、削除)ステートメントのバッチを共同で完了する必要があります。トランザクションはDMLステートメントにのみ関連しているか、DMLステートメントにはトランザクションがあります。

1.事情の4つの特徴(ACID):

  1. 原子性:原子性、最小の不可分性、すべての成功またはすべての失敗を保証します。
  2. 一貫性:1つの一貫した状態から別の一貫した状態への一貫性(すべてのDMLステートメントが動作する必要がある場合、それらは同時に成功または失敗することが保証されている必要があります);
  3. 分離:分離、複数のトランザクションは互いに影響を与えることなく互いに分離されます。
  4. 耐久性:耐久性。トランザクションがコミットされた後、データは永続化されます。

2.取引条件を使用します。

  • トランザクションを開きます。Start Transaction;
  • トランザクションの終わり:End Transaction;
  • トランザクションをコミットします。Commit Transaction;
  • トランザクションをロールバックします。 Rollback Transaction;

3.事務関連の手順:

  • 自動提出ステータスを確認します。show variables like '%autocommit%';
  • 変更の自動送信:set autocommit = 0/1;
  • 参加する:commit;
  • ロールバック:rollback;
  • ロールバックポイントを保存:savepoint s1;
  • 指定したロールバックポイントにロールバックします。rollback to s1;

4.トランザクションの開始と終了の記号:

  • オープンフラグ:トランザクションの開始をマークするために、DMLステートメント(挿入、更新、削除)が実行されます。
  • 終了標識:
    • 送信:正常終了:すべてのDMLステートメント操作履歴レコードと基礎となるハードディスクデータを一度に同期します。
    • ロールバック:失敗の終わり:すべてのDMLステートメント操作のすべての履歴レコードをクリアします。

5.トランザクションとデータベースの最下位データ:トランザクションプロセス中、DMLステートメントは終了前に最下位データを変更せず、履歴操作を記録してメモリへの記録を完了します。トランザクションの最後にのみ、それが正常に終了すると、基礎となるハードディスクファイルのデータが変更されます。

6. Mysqlで、トランザクションのコミットとロールバック:

  • Mysqlでは、デフォルトでトランザクションは自動的にコミットされます。つまり、DMLステートメントが実行されている限り、トランザクションが開かれ、トランザクションがコミットされます。
  • 上記のset autocommit = 0;閉じたトランザクションを使用した後、commit;およびrollback;使用て手動でコミットおよびロールバックできます。

7.トランザクションの4つの主要な特性の1つ:分離(isolation)参照リンク

トランザクションAとトランザクションBの間にはある程度の分離があり、分離には分離レベルがあります。(4)

  1. コミットされていない読み取り:コミットされていない読み取り
  2. コミット読み取り:コミット読み取り
  3. 反復可能読み取り:反復可能読み取り
  4. シリアライゼーション:シリアライズ可能

1)コミットされていない読み取り

- 事物A和事物B,事物A未提交的数据,事物B可以读取到
- 这里读取到的数据叫做“脏数据”
- 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

2)読み取​​りコミット

- 事物A和事物B,事物A提交的数据,事物B才能读取到
- 这种隔离级别高于读未提交
- 换句话说,对方事物提交之后的数据,我当前事物才能读取到
- 这种级别可以避免“脏数据”
- 这种隔离级别会导致“不可重复读取”
- Oracle默认隔离级别

3)反復可能な読み取り

- 事务A和事务B,事务A提交之后的数据,事务B读取不到
- 事务B是可重复读取数据
- 这种隔离级别高于读已提交
- 换句话说,对方提交之后的数据,我还是读取不到
- 这种隔离级别可以避免“不可重复读取”,达到可重复读取
- 比如1点和2点读到数据是同一个
- MySQL默认级别
- 虽然可以达到可重复读取,但是会导致“幻像读”

4)シリアライズ可能

- 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
- 这种隔离级别很少使用,吞吐量太低,用户体验差
- 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发

8.分離レベルと一貫性の関係:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44296929/article/details/108667640