MySQL ビューの紹介と基本操作のチュートリアル

MySQL ビューの紹介と基本操作のチュートリアル

序文

ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5.0 以降のバージョンでは、ビューのサポートが追加されました。

ビューを理解する

ビューは、クエリによって内容が定義される仮想テーブルです。実際のテーブルと同様に、ビューには一連の名前付き列と行データが含まれますが、ビューは実際にデータベースに格納されるデータ テーブルではありません。

ビューは、一連の名前付き列といくつかの行を含む、1 つ以上のテーブルまたはビューから派生したテーブルです。

ビューは、次の点でテーブルと異なります。

  • ビューはデータベース内の実際のテーブルではなく、データベース内の実際のテーブルに対するクエリに基づいて構造とデータが作成された仮想テーブルです。
  • データベースに保存されているクエリ操作 SQL ステートメントは、ビューの内容を定義します。列データと行データは、ビュー クエリによって参照される実際のテーブルから取得され、ビューが参照されたときに動的に生成されます。
  • ビューには実際の物理レコードはなく、データセットの形式でデータベースに保存されるわけではありません。対応するデータは、実際にはビューによって参照される実際のテーブルに保存されます。
  • ビューはデータへのウィンドウであり、テーブルはそのコンテンツです。テーブルは実際のデータの保存単位ですが、ビューはデータをさまざまな方法で表示するだけです。そのデータ ソースは実際のテーブルのままです。
  • ビューは、データ テーブルを表示する方法です。データ テーブル内の特定のフィールドで構成されるデータを照会できます。これは、単なる SQL ステートメントのコレクションです。セキュリティの観点から見ると、ビューを使用するユーザーはデータ テーブルに触れず、テーブル構造も知らないため、ビューの方がデータ セキュリティが高くなります。
  • ビューの作成と削除は、対応する基本テーブルではなく、ビュー自体にのみ影響します。

ビューとテーブルは本質的に異なりますが、ビューが定義されると、その構造はテーブルと同じになり、クエリ、変更、更新、削除などの操作を実行できます。

1. 準備

MySQL データベースに balance と customer の 2 つのテーブルを作成し、データを挿入します。

顧客テーブルを作成(
 id int(10) 主キー、
 名前 char(20) が null ではない、
 役割 char(20) nullではない、
 電話 char(20) が null ではない、
 性別文字(10)がNULLではない、
 アドレス char(50) が null でない
)ENGINE=InnoDB デフォルト文字セット=utf8;

#外部キーはcustomerIdです
テーブルバランスを作成(
 id int(10) 主キー、
 顧客ID int(10) が null ではない、
 残高 DECIMAL(10,2)、
 外部キー(顧客ID)は顧客(ID)を参照します 

)ENGINE=InnoDB デフォルト文字セット=utf8;

顧客テーブルと残高テーブルにそれぞれ 3 つのレコードを挿入します。

顧客値に挿入します(0001、"xiaoming"、'vip1'、'12566666'、'男性'、'江寧区888号')。
顧客値に挿入します(0002,"xiaohong",'vip10','15209336760','男性','No. 888, Jianye District');
顧客値に挿入します(0003,"xiaocui",'vip11','15309336760','女性','新街口888号');

バランス値(1,0001,900.55)に挿入します。
残高に値(2,0002,900.55)を挿入します。
バランス値(3,0003,10000)に挿入します。

2. 概要を表示

ビューは、簡単に言えば仮想テーブルです。データベース内の実際のデータ テーブルとは異なります。ビュー内のデータは、実際のテーブルのクエリに基づいて取得されます。ビューは実際のテーブルと同様の構造を持ちます。ビューは、実際のテーブルの更新、クエリ、削除などの操作もサポートします。では、なぜビューが必要なのでしょうか?

a. 実テーブルのセキュリティを強化する: ビューは仮想です。実テーブルへの権限を付与せずに、ユーザーにビュー権限のみを付与することで、実テーブルを保護できます。

b. データのカスタマイズされた表示: 同じ実際のテーブルに基づいて、さまざまなビューを使用して、さまざまなニーズを持つユーザー向けにデータの表示をカスタマイズできます。

c. データ操作の簡素化: これは、クエリ ステートメントが複雑で頻繁に使用されるシナリオに適しており、ビューを通じて実現できます。

......

ビュー関連の操作を行うには、ユーザーが対応する権限を持っている必要があることに注意してください。以下の操作は root ユーザーを使用して実行され、デフォルト ユーザーに操作権限が与えられます。

ビュー構文の作成

<select ステートメント> としてビュー <ビュー名> を作成します。

ビュー構文を変更する

ビュー名を変更するには、まずビューを削除し、次に同じステートメントを使用してビューを作成します。

# ビュー構造を更新します。 alter view <ビュー名> as <選択ステートメント>;
#ビュー データの更新は実際のテーブルの更新と同じであり、複数のテーブルに基づいて作成されたビューには適用されません。

注意:一部のビューのデータは更新できません。つまり、update や insert などのステートメントを使用して更新することはできません。次に例を示します。

a. 選択ステートメントに複数のテーブルが含まれている

b. ビューにhaving句が含まれている

c. 試行には異なるキーワードが含まれている

......

ビュー構文の削除

ビューをドロップ <ビュー名>

3. 表示操作

単一のテーブルに基づくビューの作成

mysql> ビューbal_viewを作成 
 -> として
 -> バランスから*を選択します。
クエリは正常、影響を受けた行は 0 行 (0.22 秒)

作成が完了したら、bal_view の構造とレコードを表示します。ビューを通じてデータをクエリして得られた結果は、実際のテーブルをクエリして得られた結果とまったく同じであることがわかります。

#bal_viewの構造を照会するmysql> desc bal_view;
+------------+---------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+------------+---------------+------+-----+--------+-------+
| id | int(10) | いいえ | | NULL | |
| 顧客ID | int(10) | いいえ | | NULL | |
| 残高 | 小数点(10,2) | はい | | NULL | |
+------------+---------------+------+-----+--------+-------+
3 行セット (0.07 秒)
#bal_view 内のレコードをクエリしますmysql> select * from bal_view;
+----+------------+----------+
| ID | 顧客ID | 残高 |
+----+------------+----------+
| 1 | 1 | 900.55 |
| 2 | 2 | 900.55 |
| 3 | 3 | 10000.00 |
+----+------------+----------+
セット内の 3 行 (0.01 秒)

ビューを作成するステートメントから結論付けるのは難しくありません。実際のテーブル内のデータが変更されると、ビュー内のデータもそれに応じて変更されます。では、ビュー内のデータが変更されると、実際のテーブル内のデータも変更されるのでしょうか?実験して、id=1 の顧客の残高を 2000 に変更してみましょう。

mysql> bal_view を更新し、balance=2000 に設定します。ここで、id=1 です。
クエリは正常、1 行が影響を受けました (0.05 秒)
一致した行: 1 変更された行: 1 警告: 0

実際のテーブル残高のデータを見てみましょう。

mysql> bal_view から * を選択します (id=1);
+----+------------+---------+
| ID | 顧客ID | 残高 |
+----+------------+---------+
| 1 | 1 | 2000.00 |
+----+------------+---------+
セット内の1行(0.03秒)

結論: ビュー テーブルのデータが変更されると、実際のテーブル内のデータもそれに応じて変更されます。

複数のテーブルに基づくビューの作成

顧客名と残高の 2 つのフィールドを持つビュー cus_bal を作成します。

mysql> ビュー cus_bal を作成
 -> (cname,bal)
 -> として
 -> customer、balance から customer.name、balance.balance を選択します
 -> ここで、customer.id=balance.customerId;
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
#cus_bal のデータを表示します。mysql> select * from cus_bal;
+----------+-----------+
| cname | bal |
+----------+-----------+
| 暁明 | 2000.00 |
| シャオホン | 900.55 |
| シャオキュイ | 10000.00 |
+----------+-----------+
3 列セット (0.28 秒)

ビューを変更する

cus_bal ビューで cname を cusname に変更します。

mysql> ビュー cus_bal を変更する
 -> (お客様の名前,bal)
 -> として
 -> customer、balance から customer.name、balance.balance を選択します
 -> ここで、customer.id=balance.customerId;
クエリは正常、影響を受けた行は 0 行です (0.06 秒)
#変更されたビュー構造を表示します。
mysql> desc cus_bal;
+---------+---------------+------+-----+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+---------+---------------+------+-----+--------+-------+
| cusname | char(20) | NO | | NULL | |
| bal | 小数点(10,2) | はい | | NULL | |
+---------+---------------+------+-----+--------+-------+
セット内の 2 行 (0.00 秒)

複数のテーブルに基づいて作成されたビューを変更する

mysql> cus_bal(cusname,bal) に値 ("ee",11) を挿入します。
エラー 1393 (HY000): 結合ビュー 'rms.cus_bal' を通じて複数の基本テーブルを変更することはできません

ビューの削除

ビューcus_balを削除します

ビュー cus_bal を削除します。
mysql> ビュー cus_bal を削除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL で複数のテーブルにビューを作成する方法
  • MySQLノートのビューの使用に関する詳細な説明
  • MySQL でのビューの使用と複数テーブル INNER JOIN に関するヒントの共有
  • MySQL のインデックスとビューの使用方法と違いの詳細な説明
  • MySQL ビューの原則と使用例の概要
  • MySQL トランザクション、ビュー、ストアド プロシージャ、トリガーに基づくアプリケーション分析
  • MySQL の問題、ビュー、関数、トリガー コマンド (詳細な説明)
  • MySQL ビューの原理と基本操作例
  • mysql ビュー関数の分析と使用例
  • Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用
  • MySQLで更新可能なビューを作成する方法の詳細な説明

<<:  Vueは左上と右上のスライドナビゲーションを実装します

>>:  Linux で Oracle データベースをバックアップするためのスケジュールされたタスクの設定に関するチュートリアル

推薦する

使用場所によって混乱しやすいXHTMLタグ

<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...

jQueryはアコーディオンの小さなケースを実装します

この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...

Vue3 でパンくず関数コンポーネントをカプセル化するいくつかの方法

目次序文1. パンくずリストはなぜ必要なのでしょうか? 2. 一次包装1. 実装のアイデア2. コー...

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

React antdはフォームの動的な増減を実現します

以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...

Linuxカーネルがプロセスアドレス空間に侵入し、プロセスメモリを変更する方法

プロセス アドレス空間の分離は、現代のオペレーティング システムの注目すべき機能です。これは、「古い...

Vue プロジェクトで addRoutes を使用する際の問題の解決策

目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...

HTMLのマーキータグは、シームレスなスクロールマーキー効果を実現します。

<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...

MySQLのorder byとlimitを混在させる際の落とし穴の詳細な説明

MySQL では、ソートには order by を、ページングには limit をよく使用します。最...

Nginx アクセス ログとエラー ログ パラメータの説明

例: nginx ログには、アクセス ログとエラー ログの 2 つの主な種類があります。アクセス ロ...

バックアップ データをインポートするときに innodb_index_stats がエラーを報告する場合の主キー競合の解決方法

障害の説明percona5.6、mysqldump フルバックアップ、バックアップデータのインポート...

Vue命令の実装原理の分析

目次1. 基本的な使い方2. 指示の動作原理2.1. 初期化2.2 テンプレートのコンパイル2.3....

MySQLとElasticsearch間のデータ非対称性問題の解決策

MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...

Windows で負荷分散に Nginx+Tomcat を使用するための完全な手順

序文今日は、Prince が Windows で負荷分散に Nginx + Tomcat を使用する...

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...