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 データベースをバックアップするためのスケジュールされたタスクの設定に関するチュートリアル

推薦する

リアルタイムクロックを実装するネイティブJS

ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...

Windows システムでの MySQL 8.0.21 インストール チュートリアル (図とテキスト)

インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...

フロントエンドとバックエンド分離プロジェクトのDockerデプロイメントの実装例

目次1. 環境整備2. イメージを実行する問題を解決するRedis のインストールNginx のイン...

HTML における水平および垂直の中央揃え方法の詳細な説明 (基礎)

序文馬を書いていたとき、水平方向と垂直方向の中央揃えの方法について、誰もあまり知らなかったと思います...

よく使われるLinuxコマンド「ll」が無効、またはコマンドが見つからないという問題を解決します

質問:よく使用されるコマンド「ll」が無効であるか、コマンドが見つかりません理由: 「ll」コマンド...

DockerでRedisをデプロイして起動する方法

DockerでRedisをデプロイするまずLinuxにDockerをインストールし、次にDocker...

Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル

ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...

dockerログマウントの問題を解決する

重要なのは、ローカルサーバーに書き込み権限がないことですキーはここにあります(アクセス拒否)。私は肯...

MySQL 5.7 解凍版のインストール、アンインストール、および文字化けしたコードの問題のグラフィック解決

1. 解凍版のインストール(1)圧縮パッケージをダウンロードし、ディスクの場所に解凍します。圧縮パッ...

WeChatアプレットコンポーネント開発:視覚的な映画座席選択機能

目次1. はじめに1. コンポーネントデータ2. コンポーネントページのレイアウト1. ロゴエリアの...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

htm 初心者ノート(初心者は必ず読んでください)

1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...

Tomcat のプレースホルダーによるポート設定方法 (パラメータ指定方式)

仕事で必要になったため、インターネットで多くの情報を見つけましたが、それらはすべてコピーアンドペース...

40以上の美しいWebフォームデザイン例

Web フォームは、訪問者と Web サイト所有者間の主要なコミュニケーション チャネルです。フィー...