第8回:それぞれが持つビュー機能 (1/3)

徹底比較!! 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)
A100
B100
A200
C100
B200

表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解剖学」(翔泳社)を共著。

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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30