MySQLトランザクションの概要

4373 ワード

文書ディレクトリ
  • 一、データベース設計の三大モデル概要
  • 二、事務の概念
  • 三、事務のACID特徴
  • 四、取引制御文
  • 五、取引の操作例
  • 一、データベース設計の三大モデルの紹介
    1、第一パターン(列ごとに原子性を保つ)
    2.第2のパターン(テーブルの各カラムがプライマリ・キーに関連付けられていることを確認)
    3.第3のパターン(各列が間接ではなくプライマリ・キーに直接関係していることを確認)
    二、事務の概念
  • トランザクションは、データベース・オペレーション・コマンドのセットを含むメカニズムであり、すべてのコマンドを全体としてシステムにオペレーション・リクエストを送信または取り消す.すなわち、データベース・コマンドのセットはすべて実行されるか、
  • を実行しないかのいずれかである.
  • は、データベースシステム上で同時動作を実行するときに、トランザクションが最小の制御ユニット
  • である分割不可能な動作論理ユニットである.
  • は、銀行、保険会社、証券取引システムなど、複数のユーザが同時に操作するデータベースシステムのシーンに適用される
  • である.
  • トランザクションの全体性によってデータの一貫性を保証する
  • 三、事務のACID特徴
  • 原子性(Atomicity)
  • トランザクションは完全な操作であり、トランザクションの各要素は不可分な
  • です.
  • トランザクションのすべての要素は、
  • を全体としてコミットまたはロールバックする必要があります.
  • トランザクション内の任意の要素が失敗した場合、トランザクション全体が
  • 失敗します.
  • コンシステンシ(Consistency)
  • トランザクションが完了すると、データは一貫した状態である必要があります.
  • サブああトランザクションが開始される前に、データベースに格納されているデータは一致する
  • にある.
  • 現在進行中のトランザクションでは、データが一致しない場合があります
  • .
  • トランザクションが正常に完了すると、データは既知の既知のステータス
  • に戻る必要があります.
  • 隔離性(Isolation)
  • データを変更するすべての同時トランザクションは、独立したトランザクションでなければならないことを示し、他のトランザクションに影響を与える
  • にいかなる方法でも依存すべきではありません.
  • データを変更するトランザクションは、同じデータを使用する別のトランザクションの開始前にこれらのデータにアクセスするか、同じデータを使用する別のトランザクションの終了後にこれらのデータ
  • にアクセスすることができる.
  • 持続性(Durability)
  • とは、システムに障害が発生するかどうかにかかわらず、トランザクションの結果が永続的な
  • であることを意味する.
  • トランザクションがコミットされると、トランザクションの効果はデータベースに永続的に保存されます.
    四、取引制御文
  • MySQLトランザクションはデフォルトで自動的にコミットされ、SQL文がコミットされるとトランザクションは自動的に
  • にコミットされます.
  • トランザクション制御文
  • BEGINまたはSTART TRANSACTION
  • COMMIT
  • ROLLBACK
  • SAVEPOINT identifier
  • RELEASE SAVEPOINT identifier
  • ROLLBACK TO identifier
  • SET TRANSACTION
  • 処理コマンドを使用してトランザクションを制御する
  • begin:トランザクション
  • を開きます.
  • commit:トランザクション
  • をコミット
  • rollback:トランザクションをロールバック
  • setコマンドによる制御
  • set autocommit=0:自動コミット禁止
  • set autocommit=1:自動コミット
  • をオン
    五、取引の操作例
    例1:データベースにテーブルtestが1枚あり、レコードを書き込み後にロールバック操作を実行する
    mysql> begin;     ##     
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into test value('1','zhangsan');    ##       
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from test;     ##     
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    +----+----------+
    1 row in set (0.00 sec)
    
    mysql> rollback;      ##       
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;   ##              
    Empty set (0.00 sec)
    

    例2:まずコマンドでオートコミット機能をオフにし、挿入コマンドを実行してからオートコミット機能をオンにし、ロールバックを実行して、記録が保存されるかどうかを確認する
    mysql> set autocommit=0;    ##         
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into test value('1','zhangsan');   ##       
    Query OK, 1 row affected (0.01 sec)
    
    mysql> set autocommit=1;     ##         
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> rollback;     ##       
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;     ##         
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    +----+----------+
    1 row in set (0.00 sec)
    

    例3:セーブポイントの理解(savepoint)
    mysql> begin;    ##     
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into test value('1','zhangsan');    ##       
    Query OK, 1 row affected (0.00 sec)
    
    mysql> savepoint a;    ##      a
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;      ##       
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    +----+----------+
    1 row in set (0.00 sec)
    
    mysql> insert into test value('2','lisi');      ##       
    Query OK, 1 row affected (0.00 sec)
    
    mysql> savepoint b;         ##      b
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;     ##      
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    +----+----------+
    2 rows in set (0.00 sec)
    
    mysql> rollback to a;     ##       a
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from test;     ##       
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    +----+----------+
    1 row in set (0.00 sec)
    
    mysql> rollback to b;      ##       b
    ERROR 1305 (42000): SAVEPOINT b does not exist
    
      :         ,   a ,   b         ,            ,                   ,                    ,         。