説明
このステートメントは、トランザクションを開始するために使用されます。
データベーストランザクション(Database Transaction)とは、単一の論理的な作業単位として実行される一連の操作を指します。トランザクション処理は、データベースの整合性を維持し、一括されたSQL操作をすべて実行するか、またはすべて実行しないかを保証するために使用できます。
明示的なトランザクションとは、ユーザーが定義または指定したトランザクションです。BEGIN および BEGIN WORK (START TRANSACTION のエイリアスとして使用される)ステートメントで明示的に開始し、COMMIT または ROLLBACK ステートメントで明示的に終了します。
構文
transaction_stmt:
START TRANSACTION [READ ONLY | READ WRITE];
| BEGIN [WORK];
| COMMIT [WORK];
| ROLLBACK [WORK];
| SET TRANSACTION {READ ONLY | READ WRITE};
パラメータの説明
パラメータ |
説明 |
|---|---|
| START TRANSACTION [READ ONLY | READ WRITE] | トランザクションを開始するステートメントです。一度トランザクションを開始すると、その後のSQLデータ操作ステートメント(つまり INSERT、UPDATE、DELETE など)は、明示的にコミットするまで有効になりません。READ ONLY は、トランザクションが読み取り専用モードで開始されることを意味し、トランザクション内では変更操作の実行を許可しません。READ WRITE は、トランザクションが読み書きモードで開始されることを意味し、デフォルトはこのモードです。 |
| BEGIN | BEGIN と BEGIN WORK は START TRANSACTION のエイリアスとして使用されます。 |
| COMMIT | 現在のトランザクションをコミットします。 |
| ROLLBACK | 現在のトランザクションをロールバックします。 |
| SET TRANSACTION {READ ONLY | READ WRITE} | 現在のトランザクションを READ ONLY または READ WRITE モードに設定します。 |
例
既存のテーブル
aは以下のとおりです。idnamenumsell_date1 a 100 2013-06-21 10:06:43 2 b 200 2013-06-21 13:07:21 3 a 50 2013-06-21 13:08:15
以下のコマンドを順番に実行してトランザクションを開始し、
idが3のnameをcに変更し、現在aを売っているレコードを1行挿入します。obclient> START TRANSACTION; Query OK, 0 rows affected obclient> UPDATE a SET name = 'c' WHERE id = 3; Query OK, 1 rows affected obclient> INSERT INTO a VALUES (4, 'a', 30, '2013-06-21 16:09:13'); Query OK, 1 rows affected obclient> COMMIT; Query OK, 0 rows affectedトランザクションをコミットした後、コマンドを実行してテーブル
aの情報を確認します。SELECT * FROM a;結果は次のとおりです:
idnamenumsell_date1 a 100 2013-06-21 10:06:43 2 b 200 2013-06-21 13:07:21 3 c 50 2013-06-21 13:08:15 4 a 30 2013-06-21 16:09:13
注意
- トランザクションが
COMMITされる前に、そのトランザクション内の操作が有効になっているかどうかを確認できます。例えば、COMMITの前に SQL ステートメントSELECT * FROM a;を実行することができます。 - 本トランザクションのセッションからのアクセスは最新の結果を読み取ることができますが、本トランザクションのセッション外からのアクセスは必ず未反映の結果となります。トランザクションが
COMMITされるまで、以前に行われた操作は、現在のトランザクション接続以外からは見えません。 - このトランザクションをロールバックしたい場合は、
COMMITの代わりにROLLBACKを使用します。