 |

|
徹底比較!! PostgreSQL vs MySQLパート2 |
第8回:それぞれが持つビュー機能
著者:NTTデータ 藤塚 勤也 2007/9/27
|
|
|
1 2 3 次のページ
|
 |
ビューとはなにか
|
ビューとは「定義したSELECT文の処理結果集合を、あたかも通常のテーブルのようにあつかう」ための機能です。アプリケーションから複雑なSQL文を発行しなくても良いようにしたり、データベースモデル設計でいうところの「外部モデルの実装形態」として使用します。データベース設計者によっては、頻繁に使用されることも多いのではないでしょうか。
ただし、ビューは検索対象に使用する際には実テーブルと同じようにあつかえますが、更新対象として使用する際には実テーブルのようにはあつかえません。そこで今回は、PostgreSQLとMySQLそれぞれが持つビューの機能について特に更新処理に着目し、具体的な例を交えながら解説します。
|
ビューの更新処理
|
PostgreSQLでは、単純にCREATE VIEW文にて作成したビューを更新することができません。ここでは詳しく触れませんが、PostgreSQLのビューは「ルール」という仕組みを利用して実現されています。
ルールとは、アプリケーションにて発行したSQL文をデータベースサーバが受け取った際に、それを事前に定義された内容のSQL文に置き換える仕組みです。いわばPostgreSQLのビューは、SELECT文に対して作成された決まりごとのようなものです。そこで、PostgreSQLのビューを更新可能にするためには、そのビューに対してINSERT文、UPDATE文、DELETE文それぞれの「決まりごと=ルール」を作成する必要があります。
一方MySQLのビューは標準で更新可能です。ただし、どのようなビューも更新可能というわけではなく、ビューを定義するSELECT文が複数のテーブルを使用していたり、グルーピングしている場合には、更新処理に関しての制限が存在します。
以降では、具体的な例を用いて、更新処理に対するPostgreSQLとMySQLのビューの動作をみていきたいと思います。
|
ビューの作成
|
まずは、ビューを作成する基になるテーブルを定義します。ここでは、表1に示す通り「COL01」と「COL02」の2つのカラムを持つSAMPLEテーブルを用意します。
COL01(char(1)) |
COL02(int) |
A |
100 |
B |
100 |
A |
200 |
C |
100 |
B |
200 |
表1:SAMPLEテーブル
SAMPLEテーブルの初期値は表1にあるように、5件のレコードが存在するものとします。
続いて、このSAMPLEテーブルを使用して「TESTV01ビュー」を作成します。TESTV01ビューはSAMPLEテーブルのCOL01の値が「A」のレコードだけを抽出したものです。以下のリスト1はPostgreSQLのCREATE VIEW文で、リスト2はMySQLのCREATE VIEW文です。
リスト1:PostgreSQLのCREATE VIEW文とSELECT結果
psql> create view testv01 as select * from sample where col01 = 'A';
psql> select * from testv01;
col01 | col02
-------+-------
A | 100
A | 200
リスト2:MySQLのCREATE VIEW文とSELECT結果
mysql> create view testv01 as select * from sample where col01 = 'A';
mysql> select * from testv01;
+-------+-------+
| col01 | col02 |
+-------+-------+
| A | 100 |
| A | 200 |
+-------+-------+
TESTV01ビューをSELECTすると、2レコードが抽出できます。
|
1 2 3 次のページ
|

|
|

|
著者プロフィール
株式会社NTTデータ 藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。
|
|
|
|