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 コンテナにログインする方法

推薦する

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...

Linux 上の Nginx に複数のバージョンの PHP をインストールする

サーバーの LNPM 環境をインストールして構成する場合、複数のバージョンの PHP の共存を考慮す...

WebページでjQueryを参照する方法

CDN(コンテンツ配信ネットワーク)を通じて参照できます。 jQuery は Google と Mi...

MLSQL スタックでストリームのデバッグを簡単にする方法

序文クラスメートが MLSQL Stack のストリーミング サポートを調査しています。そこで、フロ...

CSS3入力ボックスの実装コードはGoogleログインのアニメーション効果に似ています

CSS3を使用して、Googleログインページと同様の入力ボックスをアニメーション化します。効果1 ...

React 手書きタブ切り替え問題

親ファイル React をインポートし、{useState} を 'react' か...

MySQL SQL文を最適化するためのヒント

十分に最適化されていない、またはパフォーマンスが極端に低い SQL ステートメントに直面した場合、通...

Vueはシンプルな虫眼鏡効果を実装します

この記事では、参考までに、簡単な虫眼鏡効果を実現するためのVueの具体的なコードを紹介します。具体的...

CentOS で MySQL を完全にアンインストールする方法

この記事では、CentOSでのMySQLの完全アンインストールについて記録しています。具体的な内容は...

Linux で NFS のワンクリック展開を実装する方法

サーバー情報管理サーバー: m01 172.16.1.61サーバー: nfs01 172.16.1....

Nginx でバージョン番号を隠したり偽造したりする方法

1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...

CSS の一部のプロパティの前には「*」または「_」が付きます。

CSS の一部のプロパティの前には「*」または「_」が付きます。さまざまなブラウザを識別する例えば...

MySQL の時間タイプとモードの詳細

目次1. MySQL の時刻型2. タイムゾーンを確認する3. 不正な時間値4. 厳密モード5. 事...

VMWare を使用して Windows 上で Linux 環境を構築する手順 (画像とテキスト)

Mac を返却して以来、元のラップトップは使用されていません。このラップトップの構成は非常に良好で...

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...