説明
このステートメントは、トランザクションを開始するために使用されます。
データベーストランザクション(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が以下のようにあるとします。id name num sell_date 1 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;結果は次のとおりです:
id name num sell_date 1 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;を実行することができます。 - このトランザクションのSessionからのアクセスは最新の結果を読み取ることができますが、このトランザクションのSession以外からのアクセス結果は必ず無効です。トランザクションが
COMMITされる前に、以前に行った操作は現在のトランザクション接続以外では見えません。 - このトランザクションをロールバックしたい場合は、
COMMITの代わりにROLLBACKを使用します。