MySQL(七)

3821 ワード

トランザクション管理
トランザクションはDML文のセットで構成され、論理的に相関があり、すべて失敗するか、すべて成功するか、つまり全体です.MySQLは、私たちが望む効果を達成するメカニズムを提供し、トランザクションは異なるクライアントが見たデータが異なることを規定しています.トランザクションの基本的な操作は、例を直接見ます.テストテーブルの作成
mysql> create table account(
    -> id int primary key,
    -> name varchar(32) not null,
    -> balance decimal(10,2) not null);
Query OK, 0 rows affected (0.03 sec)

トランザクションの開始
start transaction;

セーブポイントの作成
savepoint     ;

セーブポイントに戻る
rollback to     ;

上記の例では、コードを参照してください:トランザクションを開く
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

セーブポイントの設定
mysql> savepoint aa;
Query OK, 0 rows affected (0.00 sec)

レコードを追加
mysql> insert into account values(1,'  ',10);
Query OK, 1 row affected (0.01 sec)

セーブポイントの設定
mysql> savepoint bb;
Query OK, 0 rows affected (0.00 sec)

レコードを追加
mysql> insert into account values(2,'  ',10000);
Query OK, 1 row affected (0.00 sec)

表示
mysql> select * from account;
+----+------+----------+
| id | name | balance  |
+----+------+----------+
|  1 |    |    10.00 |
|  2 |    | 10000.00 |
+----+------+----------+
2 rows in set (0.00 sec)

2番目のレコードエラーが見つかり、ロールバック
mysql> rollback to bb;
Query OK, 0 rows affected (0.00 sec)

表示
mysql> select * from account;
+----+------+---------+
| id | name | balance |
+----+------+---------+
|  1 |    |   10.00 |
+----+------+---------+
1 row in set (0.00 sec)

すべてのエラーが検出された場合は、トランザクションを開くまでロールバックします.トランザクション操作の注意(1)セーブポイントが設定されていない場合は、ロールバックも可能であり、トランザクションの開始までロールバックのみ可能です.(rollbackはロールバックしますが、まだコミットされていないことが前提です).(2)トランザクションがコミットされた場合(commit)、ロールバックはできません.(3)どのセーブポイントにロールバックするかを選択できる.(4)InnoDBはトランザクションをサポートし,MySIAMはトランザクションをサポートしない.
トランザクションの独立性レベルデータベースのテーブルを同時に操作するクライアントが複数ある場合は、独立性が必要です.MySQLは独立性レベルを提供し、異なるトランザクションがデータを操作する際に独立性を有し、データの一貫性を保証します.(1)独立性のない問題%ダーティ・リード:1つのトランザクションがデータにアクセスしている間にデータが変更され、その変更がデータベースにコミットされていないことを意味します.これは、別のトランザクションもこのデータにアクセスし、そのデータを使用します.通俗的には、見るべきでないデータを見たことだ.繰り返し不可:同じデータを1つのトランザクション内で複数回読み出すことを意味します.このトランザクションがまだ終了していない場合、別のトランザクションもこのデータにアクセスします.最初のトランザクションの2回目の読み取りデータの間で、2番目のトランザクションの変更により、1番目のトランザクションの2回目の読み取りデータが異なる可能性があります.これにより、1つのトランザクションで2回目の読み取りデータが異なるため、重複しない読み取りと呼ばれます.%幻読み:トランザクションが独立して実行されない場合に発生する現象です.最初のトランザクションがデータを変更した場合、この変更はテーブル内のすべてのデータ行に関連します.また、2番目のトランザクションもこのテーブルのデータを変更します.この変更はテーブルに新しいデータを挿入することです.その後、最初のトランザクションを操作したユーザーは、テーブルに変更されていないデータ行があることに気づき、幻覚が発生したようです.再読み取り不可のポイントは修正であり、同じ条件で、あなたが読み取ったデータを再読み取りするのは異なる値であることに注意してください.一方、幻読のポイントは新規または削除であり、同じ条件で、1回目と2回目で読み出された記録数が異なる.(2)独立性レベル:リード未コミット(read uncommitted)、リードコミット(read committed)、リピートリード(repeatable read)、シリアル化(serializable)である.MySQLのデフォルトの独立性レベルは繰り返し読み取り可能で、一般的には変更しないでください.トランザクションの独立性レベルの設定
mysql> set session transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)

現在の独立性レベルの表示
mysql> select @@tx_isolation;
+------------------+
| @@tx_isolation   |
+------------------+
| READ-UNCOMMITTED |
+------------------+
1 row in set, 1 warning (0.00 sec)

トランザクションのACIDプロパティ(1)アトミック(Atomicity)とは、トランザクションが分割できない作業単位であり、トランザクション内の操作が発生するか、発生しないかを意味します.(2)コンシステンシ(Consistency)トランザクションは、読み取り専用でない限り、ステータスをカプセル化して変更することができます.トランザクションは、任意の所定の時間にトランザクションがどれだけ同時になるかにかかわらず、常にシステムをコンシステンシ状態に保つ必要があります.(3)独立性(Isolation)とは、複数のユーザが同時にデータベースにアクセスする場合、データベースは各ユーザが開いているトランザクションであり、他のトランザクションの操作データに干渉されてはならず、複数の同時トランザクション間で互いに隔離されることを意味する.(4)永続性(Durability)とは、トランザクションがコミットされると、データベースのデータに対する変更が永続的であり、次にデータベースに障害が発生しても影響を与えるべきではないことを意味します.