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 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

Docker で MySQL データベースを使用して LAN アクセスを実現する

1. MySQLイメージを取得する docker pull mysql:5.6注: mysql5.7...

HTML の基本 - ハイパーリンク スタイルを設定する簡単な例

*** ハイパーリンクのスタイル設定の例a:link クリックされる前のハイパーリンクの状態a:vi...

WeChat アプレット計算機の例

この記事では、参考までに、計算機を実装するためのWeChatアプレットの具体的なコードを紹介します。...

DIVマスクを使用して、マウスでチェックボックスを直接チェックすることが無効である問題を解決します

フロントエンドの開発過程で、チェックボックスが必要な状況が発生しました。ユーザー操作の利便性を考慮し...

Vueプロジェクトでパラメータジャンプ機能を実装する

ページの説明:​ メインページ: 名前 —> shishengzuotanhuichaxun ...

Docker execは複数のコマンドを実行します

docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...

64 ビット CentOs7 ソース コードのインストール mysql-5.6.35 プロセス共有

インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [root...

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

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

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

アイデアを war パッケージにパッケージ化し、tomcat にデプロイしてアクセス パスの問題 (図とテキスト)

Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...

JS でオブジェクト プロパティを簡単にトラバースするいくつかの方法

目次1. 自己列挙可能なプロパティ2. Object.values()はプロパティ値を返します3. ...

rpm を使用して指定されたバージョンの docker (1.12.6) をインストールする詳細な手順

1. 理由システムが Centos7.3 の場合、yum install docker を使用して直...

数千万データを持つMySQLテーブルを最適化する実践記録

序文まずここで説明させてください。インターネット上では、Alibaba では 500 万のデータを異...

Javascriptでシンプルなナビゲーションバーを実装

この記事では、参考までに、シンプルなナビゲーションバーを実装するためのJavascriptの具体的な...