SQL - トランザクションの処理 (COMMIT / ROLLBACK)
■内容
Top
■トランザクション
- "トランザクション" はすべてのデータベースシステムで基礎となる概念です。トランザクションの基本的要点は複数の手順を単一の「すべてか無しか」の操作にまとめあげることです。手順の進行途中の状態はほかの動いているトランザクションからは見えません。
- トランザクションは、最初の SQL 文で暗黙的に開始します。
- 終了は、つぎの文によります。
(*)
- トランザクションの特性には、つぎのものがあります。
Top
■COMMIT 文の基本
- トランザクションを確定し、終了します。
- 一般形式(基本)
COMMIT
Top
■例題
Top
■ROLLBACK 文の基本
- トランザクションを取り消し、終了します。
- 一般形式(基本)
ROLLBACK
Top
■例題
- つぎの操作を一連のトランザクションとして実行し、最後にロールバックしてください。
- トランザクションの開始を宣言します。
- 顧客表(customer)のすべての行を削除します。(DELETE文を使います。)
- 担当者表(employee)のすべての担当者の給与(sal)を1.2倍します。
- ロールバックします。
=> BEGIN;
BEGIN
=> DELETE FROM customer;
DELETE 20
=> SELECT * FROM customer ORDER BY cust_id;
cust_id | cust_name | address | tel | fax
---------+-----------+---------+-----+-----
(0 rows)
=> UPDATE employee SET sal = sal + 1000;
UPDATE 2
=> SELECT * FROM employee ORDER BY emp_id;
emp_id | dept_id | emp_name | birthday | hiredate | sex | sal
--------+---------+------------+----------+------------+-----+---------
100 | 20 | 丸野 和夫 | | 2004-04-04 | 1 | 3000.00
110 | 30 | 山田 真弓 | | 2004-04-04 | 2 | 3200.00
(2 rows)
=> ROLLBACK;
ROLLBACK
=> SELECT * FROM customer ORDER BY cust_id;
cust_id | cust_name | address | tel | fax
---------+-------------+----------------------+---------------+---------------
1 | 阪上 徹 | 和歌山県和歌山市 | 073-123-XXXX | 073-123-XXXX
2 | 松坂 宏 | 東京都千代田区 | 03-3158-XXXX | 03-3258-XXXX
3 | 北島 浩二 | 大阪府大阪市北区 | 06-1234-XXXX | 06-1234-XXXX
4 | 永井 光夫 | 東京都渋谷区 | 03-3124-XXXX | 03-0124-XXXX
5 | 関根 修一 | 大阪府泉佐野市 | 0724-99-XXXX | 0724-99-XXXX
6 | 木田 直美 | 東京都中央区 | 03-3333-XXXX |
7 | 片桐 昇 | 東京都新宿区 | 03-1111-XXXX | 03-1111-XXXX
8 | 田中 正敏 | 東京都品川区 | 03-2222-XXXX | 03-2222-XXXX
9 | 西口 和夫 | 東京都目黒区下目黒 | 03-3333-XXXX | 03-3333-XXXX
10 | 山口 克巳 | 東京都大田区 | 03-4444-XXXX | 03-4444-XXXX
11 | 加藤 昭夫 | 神奈川県川崎市 | 044-505-XXXX | 044-505-XXXX
12 | 石橋 健太郎 | 札幌市中央区 | 011-555-XXXX |
13 | 米田 恵美子 | 東京都港区虎ノ門 | 03-3987-XXXX | 03-3987-XXXX
14 | 松田 純一 | 東京都千代田区大手町 | 03-3975-XXXX | 03-3975-XXXX
15 | 松下 晴彦 | 東京都板橋区 | 03-3123-XXXX | 03-3123-XXXX
16 | 安井 和義 | 愛知県東海市 | 0560-448-XXXX | 0560-448-XXXX
17 | 高沢 千夏 | 大阪府大阪市大淀区 | 06-6777-XXXX | 06-6777-XXXX
18 | 島田 良子 | 東京都渋谷区 | 03-3698-XXXX |
19 | 吉田 正也 | 神奈川県川崎市 | 044-888-XXXX | 044-888-XXXX
20 | 藤田 幹夫 | 東京都中央区 | 03-3578-XXXX |
(20 rows)
=> SELECT * FROM employee ORDER BY emp_id;
emp_id | dept_id | emp_name | birthday | hiredate | sex | sal
--------+---------+------------+----------+------------+-----+---------
100 | 20 | 丸野 和夫 | | 2004-04-04 | 1 | 2000.00
110 | 30 | 山田 真弓 | | 2004-04-04 | 2 | 2200.00
(2 rows)
Top
■構文
COMMIT [ WORK | TRANSACTION ]
ROLLBACK 文
ROLLBACK [ WORK | TRANSACTION ]
Top