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

推薦する

JavaScript はチェックボックスの選択機能を実装します

この記事の例では、すべてのチェックボックスの選択を実現するためのJavaScriptの具体的なコード...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

HTMLの基礎知識:ウェブページの基礎知識

HTML は Hypertext Markup Language の略です。これは、実際のプレゼンテ...

js 配列から重複を削除する 11 の方法

実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...

HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

ワンクリック実行仮想マシンに Python 3.8 をインストールするには、ネットワーク アダプター...

CentOS 7 は Hadoop 2.10 の高可用性 (HA) をビルドします

この記事では、CentOS 7 で高可用性 Hadoop 2.10 クラスターを構築する方法を紹介し...

MySQL 8.0 のメモリ消費の詳細な分析

目次1. innodb_buffer_pool_size 2. innodb_log_buffer_...

JavaScript のフラット配列をツリー構造に変換する例

目次バックグラウンドで10,000個のデータが失われた再帰法非再帰的方法要約するバックグラウンドで1...

MySQL 5.7 データベースのインストール手順の個人的な要約

1.mysql-5.7.19-winx64.zip(これは無料のインストールバージョンで、約318 ...

JavaScript JSON.stringify() の使用法の概要

目次1. 使用方法1. 基本的な使い方2. 2番目のパラメータ - フィルター3. 3番目のパラメー...

Ubuntu でホームディレクトリを新しいパーティションに移行する詳細なチュートリアル

ユーザーのホーム ディレクトリがどんどん大きくなってきたら、ホーム ディレクトリを新しいパーティショ...

MySQLデータベースでサポートされているストレージエンジンの比較

目次ストレージエンジンMySQL でサポートされているストレージ エンジン同時実行制御ロック粒子をロ...