MySQLのTESTV01ビューは、何か特別な手続きや設定をすることなく、このままでも更新することができます。UPDATE文の実行結果は以下の通りです(リスト4)。
リスト4:MySQLでの実行結果
mysql> update testv01 set col02 = 10 ;
mysql> select * from testv01;
+-------+-------+
| col01 | col02 |
+-------+-------+
| A | 10 |
| A | 10 |
+-------+-------+
mysql> select * from sample;
+-------+-------+
| col01 | col02 |
+-------+-------+
| A | 10 |
| B | 100 |
| A | 10 |
| C | 100 |
| B | 200 |
+-------+-------+
前述したPostgreSQLのビューへのUPDATE文の実行結果と見比べてください。MySQLの場合は、PostgreSQLのルールのような特別な設定をすることなく、TESTV01ビュー、SAMPLEテーブルともに同じ結果になります。
さらにTESTV01ビューに対して1レコードをINSERTしてみます。INSERTするレコードの値はCOL01=E、COL02=100とした場合、正常に実行することができます。しかし、TESTV01ビューをSELECTしても、INSERTしたレコードは抽出できません(リスト5)。
リスト5:INSERTを実行した結果
mysql> insert into testv01 values ('E',100);
mysql> select * from testv01;
+-------+-------+
| col01 | col02 |
+-------+-------+
| A | 10 |
| A | 10 |
+-------+-------+
mysql> select * from sample;
+-------+-------+
| col01 | col02 |
+-------+-------+
| A | 10 |
| B | 100 |
| A | 10 |
| C | 100 |
| B | 200 |
| E | 100 |
+-------+-------+
実際に、TESTV01ビューの基になっているSAMPLEテーブルをSELECTすると、INSERTしたレコードが格納されていることが確認できます。ちょっと不思議な感じがしますが、これは正しい動作です。
|