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

推薦する

vue-cli 設定では Vuex の完全なプロセスレコードを使用します

目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...

Vue で PC アドレスをモバイル アドレスにリダイレクトする方法

要件:PC側とモバイル側は2つの独立したプロジェクトです。2つのプロジェクトの内容は基本的に同じで、...

Linux コマンドラインで電卓を使用する 5 つのコマンド

みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...

ウェブデザインでテキストのサイズを合わせる方法: 小さなテキスト、大きな体験

iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...

HTMLで細い線のテーブルを作成する簡単な例

この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...

MySQLの暗黙的な変換問題の解決

1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...

MySQL 構成 SSL マスタースレーブ レプリケーション

MySQL5.6 SSLファイルの作成方法公式ドキュメント: https://dev.mysql.c...

Win10 + Ubuntu20.04 LTS デュアルシステムブートインターフェースの美化

エフェクト表示組み込みのブートインターフェースがあまりにも醜いので、テーマをダウンロードして美しくし...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

PHPのmail()関数を使用してメールを送信する

PHPのメール関数を使用してメールを送信するmail()関数はメールサーバーに接続し、サーバーと対話...

DockerでGDBを使用するときにブレークポイントを入力できない問題を解決する

質問docker で gdb を実行すると、ブレークポイントに到達しますが、ブレークポイントに入るこ...

Nginx リバース プロキシと負荷分散の実践

リバースプロキシリバースプロキシとは、プロキシサーバーを介してユーザーのアクセス要求を受信し、ユーザ...

MySQL公式パフォーマンステストツールmysqlslapの使い方の紹介

目次導入説明書実際の経験まとめ導入MySQL は最も人気のあるオープンソース データベースとして、さ...

VS2019をMySQLデータベースに接続するプロセスと一般的な問題の概要

今日の午後からVS2019をMySQLで使えるのではないかと思い、いろいろ環境構築を始めました。プロ...

レスポンシブ原則のソースコード分析のVue解釈

目次初期化初期化状態()初期化プロパティ()初期化データ()観察する()オブザーバーリアクティブを定...