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

ブログ    

推薦する

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

DeepinでPyenvをインストールする手順

序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...

MySQL レプリケーションの利点と原則を詳しく説明します

レプリケーションとは、マスター データベースの DDL および DML 操作をバイナリ ログを介して...

MySQL トランザクションの詳細

目次導入取引の4つの特徴トランザクション分離レベル確認するMVCC現在の読書スナップショット読み取り...

スキン効果を実現するJavaScript(背景の変更)

この記事では、スキン変更効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

Blazor における CSS 分離の問題

1. 環境VS 2019 16.9.0 プレビュー 1.0 .NET SDK 5.0.100 2. ...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

MySQL データベース操作 (作成、選択、削除)

MySQL データベースの作成MySQL サービスにログインしたら、create コマンドを使用し...

MySql への新しいユーザーの追加、ユーザー用のデータベースの作成、ユーザーへの権限の割り当ての概要

1. 新しいユーザーを追加するローカルIPアクセスのみを許可する '123456' ...

VMWare ネットワーク アダプタの 3 つのモードの実装プロセスの分析

3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...

スライド効果を実現するためのネイティブJavaScript

ページ、特にホームページを作成するときは、通常、Web サイト全体の他のメイン ページにリンクできる...

Zabbixは複数のmysqlプロセスの監視を実装します

1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...

MySQL GTID マスターとスレーブの不一致を修復するソリューション

目次解決策1: レプリカを再構築する前提条件アドバンテージ欠点手順マスター奴隷解決策2: データ修復...