MySQL ビューの原則と使用例の概要

MySQL ビューの原則と使用例の概要

この記事では、MySQL ビューの原理と使用法についてまとめます。ご参考までに、詳細は以下の通りです。

1. ビューとは何ですか?

ビューは、クエリによって内容が定義されるコンピュータ データベース内の仮想テーブルです。実際のテーブルと同様に、ビューは名前付きの列とデータ行のセットで構成されます。ただし、ビューはデータベース内に格納されたデータ値のセットとしては存在しません。行と列のデータは、ビューを定義するクエリによって参照されるテーブルから取得され、ビューが参照されたときに動的に生成されます。簡単に言えば、ビューとは定義の結果で構成されるテーブルです。

例: クラス テーブル class (ID, name) と学生テーブル student (id, class_id, name) を定義します。

データ テーブルの構造が複雑で、データの一部のみを知りたい場合は、ビューを使用して必要なデータを定義できます。

ビューを作成します。

次のようにコードをコピーします
ビュー v_stu を作成し、c.name を c_name として、s.name を stu_name として学生 s、クラス c から選択します (c.id = s.class_id)

クエリビューv_stu

v_stuから*を選択

c_nameスタッズ名
ウークラス1
クラス2

2. ビューを使用する理由

1.セキュリティ。これは通常、次のように行われます。ビューを作成し、ビューが操作するデータを定義します。次に、ユーザー権限をビューにバインドします。この方法は

機能が追加されました: grant ステートメントでビューの権限を付与できます。

2.クエリパフォーマンスが向上しました

3.柔軟な機能要件がある場合、テーブルの構造を変更する必要があり、大きな作業負荷が発生します。次に、仮想テーブルを使用して、変更を少なくすることができます。

これは実際の開発ではより役立ちます。

例: 何らかの理由で、テーブル a とテーブル b を結合して新しいテーブル c を作成する必要がある場合。最終的には、テーブル a もテーブル b も存在しなくなります。元のプログラムの SQL ステートメントはテーブル A とテーブル B へのクエリに基づいていたため、大量の SQL ステートメントを書き直す必要があります (テーブル C を操作するため)。そして、その見解を通して、あなたは何の変更も達成できません。元のテーブル a および b と同じ名前を持つ 2 つのビューを定義します。ビュー a と b は、テーブル c からのコンテンツの抽出を完了します。

注: このソリューションを使用する場合、ビューを詳細に理解するほど、効果的です。構文の点では、ビューの使用はテーブルの使用と違いがないためです。たとえば、ビュー名が a の場合、クエリは引き続き「 select * from a 」になります。

4. 複雑なクエリ要件。問題を分解し、複数のビューを作成してデータを取得できます。ビューを組み合わせると、目的の結果が得られます。

ビューの動作メカニズム: ビューが呼び出されると、ビュー内の SQL が実行され、データ取得操作が実行されます。ビューの内容は保存されず、ビューが参照されたときにデータが導出されます。これはスペースを占有せず、即時参照であるため、ビューの内容は常に実際のテーブルの内容と一致します。このようにビューを設計する利点は何ですか?スペースを節約し、コンテンツが常に一貫している場合は、ビューのコンテンツを維持する必要はありません。実際のテーブルのコンテンツを維持することで、ビューの整合性を確保できます。

3. 実行方法の表示

ビューには実際のデータは保存されず、実際のテーブル内のデータのみが参照されます。参照されるデータは定義によって決まります。ビューをクエリすると、実際には定義からデータが取得されます。

MySQL には infomation_schema というデータベースがあります。これは MySQL に付属しているデータベースで、MySQL データベースのメタデータの一部が格納されています。いわゆるメタデータとは、MySQL のテーブル情報を指します。ビュー情報、列情報など簡単に言えば、MySQL データベースのディレクトリに相当します。すべてのビューには、ビュー テーブル内にストレージの説明があります。これにより、MySQL がどのように動作するかがわかります。

v_stu から * を選択します。

v_stu はテーブル名にもなります。ビューとテーブルの物理構造は異なるため、実際のデータはテーブル内にありますが、ビューは必要なデータを取得するために定義を見つける必要があります。v_stu がビューであることをどうやって知るのでしょうか?これは、これを実行するディレクトリ表示ルーチンがあるためです。

表示メカニズム:

ビュー処理には、置換と実体化の 2 つのメカニズムがあります。

① 置換型:ビューを操作する場合、ビュー名がビュー定義に直接置き換えられ、結果はselect * from (select c.name as c_name ,s.name as stu_name from student s,class c where c.id = s.class_id) となり、MySQL に送信されて実行されます。

② 具体的な形式:MySQLはまずビュー実行の結果を取得し、それを中間結果としてメモリに一時的に保存します。その後、外側の SELECT ステートメントはこれらの中間結果 (一時テーブル) を呼び出します。

どちらも成果を出すことを目指しているようで、形式の違いはあるものの、本質的な違いが認識されていないようです。 2つの方法の違いは何ですか?

置換方法は、ビュー式を置き換えてSQL全体として処理する方法です。具体的なアプローチとしては、まずビューの結果を処理し、次に外部クエリの要件を処理します。

交換方法は、まず準備し、次に実行と要約できます。

具体的なまとめ方は、別々に扱うことです。

どちらの方法が良いでしょうか?全く分かりません。 MySQL は処理に使用する方法を決定します。ビューを定義するときに使用する方法を指定することもできます。

例:

文法:

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW ビュー名 [(プロパティリスト)]
AS SELECT ステートメント [WITH [CASCADED|LOCAL] CHECK OPTION];

ALGORITHMには3つのパラメータがあります: merge、TEMPTABLE、UNDEFINED

merge : 処理方法は置換であり、実際のテーブルのデータを更新できます。

TEMPTABLE : マテリアライズド。データは一時テーブルに保存されるため、更新操作は許可されません。

パラメータ定義がUNDEFINED (ALGORITHM パラメータが定義されていない) の場合。 MySQL では置換方法を選択することを優先します。より効果的だからです。

例:

作成アルゴリズム = マージビュー v_stu として、c.name を c_name として、s.name を stu_name として、学生 s、クラス c から選択します。c.id = s.class_id
v_stu を更新し、c_name = '' を設定します。c_name = '';

実行成功

ALGORITHM=TEMPTABLEview v_stu を作成し、c.name を c_name 、s.name を stu_name として学生 s、クラス c から選択します。c.id は s.class_id です。

実行に失敗しました。更新できません。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQLのビューとインデックスの使い方と違いの詳細な説明
  • MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明
  • MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明
  • MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い
  • mysql 3つのテーブルを接続してビューを作成する
  • MySQL で複数のテーブルにビューを作成する方法
  • MySQL ビューの原理と基本操作例
  • Python を使用して MySQL ビューのインポートとエクスポートの依存関係の問題を解決する
  • MySQL ビューの原理と使用法の詳細な分析

<<:  JS WebSocketを使用して簡単なチャットを実装する方法

>>:  Linux システムに docker をインストールし、ssh 経由で docker コンテナにログインする方法

推薦する

MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明

序文InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 M...

Dockerリポジトリの一般的なコマンドの詳細な説明

ログイン dockerログインdocker login コマンドを実行し、ユーザー名、パスワード、メ...

例によるMySql CURRENT_TIMESTAMP関数の分析

時間フィールドを作成するときデフォルトのCURRENT_TIMESTAMPデータを挿入する際、このフ...

CSS 要約ノート: 変換、遷移、アニメーションの例

1.移行遷移プロパティの使用法: transition :transition-property t...

MySQL データベースの最適化: インデックスの実装原則と使用状況の分析

この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...

プライベートイメージウェアハウスを構築するためのDockerレジストリの実装方法

マイクロサービスのイメージは、保存用に Docker リポジトリにアップロードされます。一般的に使用...

JavaScript における clientWidth、offsetWidth、scrollWidth の違い

1. コンセプトこれらはすべて Element の属性であり、要素の幅を示します。 Element....

Vue で HTML 5 ドラッグ アンド ドロップ API を使用する方法

ドラッグ アンド ドロップ API は、ドラッグ可能な要素を HTML に追加し、ドラッグ可能な豊富...

CSS3+HTML5+JSでブロックの縮小・拡大アニメーション効果を実現

最近、あるプロジェクトに取り組んでいたとき、自分のプロジェクトでは CSS3 のアニメーション技術を...

Vue 条件付きレンダリング v-if と v-show

目次1. 動詞-if 2. <template> で v-if を使用する3. キーを使...

Mysql データベースのマスタースレーブ同期構成

目次Mysql マスタースレーブ同期構成1. 2つのmysqlをインストールする2. MySQL設定...

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...

Vue で ToDo アプリケーションを実装する例

背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...

CSS3 は反転可能なホバー効果を実現します

CSS3 は反転可能なホバー効果を実装します。具体的なコードは次のとおりです。 1.css /*基本...

画像のシームレスなスクロールを実現する JavaScript タイマー

この記事では、画像のシームレスなスクロールを実現するためのJavaScriptの具体的なコードを参考...