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