以下のリスト4はPostgreSQLの実行結果です。
リスト4:PostgreSQLでの実行結果
sample=# select * from sample; ← (1)
col01
-------
A
1
P
(3 rows)
sample=# select * from logsample; ← (2)
before_col01 | after_col01
--------------+-------------
(0 rows)
sample=# update sample set col01='W' where col01='A'; ← (3)
UPDATE 1
sample=# update sample set col01='W' where col01='1'; ← (4)
UPDATE 1
sample=# select * from logsample; ← (5)
before_col01 | after_col01
--------------+-------------
1 | W
(1 row)
sample=# select * from sample; ← (6)
col01
-------
P
W
W
(3 rows)
続いてリスト5は、MySQLでの実行結果になります。
リスト5:MySQLでの実行結果
mysql> select * from sample; ← (1)
+-------+
| col01 |
+-------+
| A |
| 1 |
| P |
+-------+
3 rows in set (0.00 sec)
mysql> select * from logsample; ← (2)
Empty set (0.00 sec)
mysql> update sample set col01='W' where col01='A'; ← (3)
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update sample set col01='W' where col01='1'; ← (4)
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from logsample; ← (5)
+--------------+-------------+
| before_col01 | after_col01 |
+--------------+-------------+
| 1 | W |
+--------------+-------------+
1 row in set (0.00 sec)
mysql> select * from sample; ← (6)
+-------+
| col01 |
+-------+
| W |
| W |
| P |
+-------+
3 rows in set (0.00 sec)
それぞれの流れは以下のようになっています。
- 1.sampleテーブルの初期状態を確認
- col01カラムに3種類の値が存在している。
- 2.logsampleテーブルの初期状態を確認
- 1件もレコードが存在していない。
- 3.sampleテーブルへのUPDATE文実行
- col01カラムの値が「A」のレコードを対象にcol01カラムの値を「W」に更新する。トリガは起動されるが、logsampleテーブルへの挿入は実行されない。
- 4.sampleテーブルへのUPDATE文実行
- col01カラムの値が「1」のレコードを対象にcol01カラムの値を「W」に更新する。トリガが起動され、logsampleテーブルへレコードが挿入される。
- 5.logsampleテーブルの内容確認
- 1件のレコードが存在している。
- 6.sampleテーブルの内容確認
- 2件のレコードの内容が更新されている。
表2:トリガ処理の流れ
|