TOPサーバ構築・運用> ビューとはなにか




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

この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。
ご意見、ご要望にお応えします! インプレスIT INSIDE

INDEX
第8回:それぞれが持つビュー機能
ビューとはなにか
  PostgreSQLのビューの更新
  更新できるビューの条件
徹底比較!! PostgreSQL vs MySQLパート2
第1回 同じようで違うデータ型
第2回 拡張部分によって違いがでてくるSQL文
第3回 実は差があるキャラクターセットの違い
第4回 PostgreSQLとMySQLに対応したGUIツールを使いこなす
第5回 バックアップとリストア
第6回 ストアドプロシージャ
第7回 トリガ
第8回 それぞれが持つビュー機能

Think IT 過去人気記事

注目おすすめ情報

Think IT人気ライター BEST 5

IT製品/サービス資料ダウンロード
    おすすめのホワイトペーパー情報を準備中です