MySQLトランザクションの概要
文書ディレクトリ一、データベース設計の三大モデル概要 二、事務の概念 三、事務の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枚あり、レコードを書き込み後にロールバック操作を実行する
例2:まずコマンドでオートコミット機能をオフにし、挿入コマンドを実行してからオートコミット機能をオンにし、ロールバックを実行して、記録が保存されるかどうかを確認する
例3:セーブポイントの理解(savepoint)
1、第一パターン(列ごとに原子性を保つ)
2.第2のパターン(テーブルの各カラムがプライマリ・キーに関連付けられていることを確認)
3.第3のパターン(各列が間接ではなくプライマリ・キーに直接関係していることを確認)
二、事務の概念
四、取引制御文
五、取引の操作例
例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 , , , , 。