sql >> データベース >  >> RDS >> Mysql

MySQLデータベースでビューを使用する方法

    ビュー MySQLでは、他のテーブルに格納されているデータを表示するためにトリガーできる名前付きクエリです。つまり、ビューはユーザー定義の仮想テーブルです。ビューは次の目的で使用できます:

    • データベースのセキュリティを強化します。 データベースに保護が必要な機密情報が含まれている場合は、ビューを使用するとデータを分離するのに役立ちます。ビューは事前定義された結果セットを使用して作成でき、機密情報を含むテーブルではなく、そのビューへのアクセスのみをユーザーに許可できます。
    • 複雑なビジネスロジックをデータベースサーバーに移動します。 開発者は、頻繁に使用するソフトウェアロジックをさまざまなクライアントでコーディングする代わりに、ビューを使用してロジックをデータベースレベルに移動できます。たとえば、ビューを作成して、総売上に応じて顧客の分類を表示できます。
    • データの気を散らすものを減らします。 ビューは、異なるテーブルからの結果を組み合わせて、呼び出されたときにのみ関連する列を表示できます。

    このガイドでは、次のことを学びます。

    • MySQLビューの構文はどのように構成されていますか。
    • MySQLビューを作成する方法。
    • MySQLビューを呼び出す方法。
    • MySQLでビューをドロップする方法。

    始める前に

    このガイドに従うには、次のものがあることを確認してください。

    1. MySQLソフトウェアを実行するLinode。 『Linode入門ガイド』に従って、Linodeをプロビジョニングできます。

    2. LinodeにインストールされているMySQLサーバーソフトウェア(またはMariaDB)。いくつかのLinuxディストリビューションにMySQLをインストールする方法を説明するガイドが含まれているMySQLセクションを参照してください。

    データベースの準備

    MySQLビューを作成する前に、サンプルデータベースを作成し、いくつかのテーブルを定義して、最初にいくつかのデータを入力します。

    1. LinodeにSSHで接続します。次に、次のコマンドを入力して、rootユーザーとしてMySQLにログインします。

      mysql -u root -p
      

      プロンプトが表示されたら、MySQLサーバーのrootパスワードを入力し、 Enterを押します。 続行します。

      パスワードが受け入れられない場合は、sudoを使用して前のコマンドを実行する必要がある場合があります :

      sudo mysql -u root -p
      
    2. パスワードが受け入れられると、MySQLプロンプトが表示されます:

      
      mysql >
      

      MariaDBを使用している場合は、代わりに次のようなプロンプトが表示される場合があります。

      
      MariaDB [(none)]>
      
    3. 次に、このSQLコマンドを実行して、sample_databaseという名前のサンプルデータベースを作成します。 :

      CREATE DATABASE sample_database;
      

      データベースが正常に作成されたことを確認する次の出力が表示されます。

      
      Query OK, 1 row affected (0.02 sec)
      
    4. sample_databaseを選択します データベース:

      USE sample_database;
      

      次の出力が表示されます:

      
      Database changed
      
    5. このコマンドを実行して、customersを作成します テーブル:

       CREATE TABLE customers
       (
       customer_id BIGINT PRIMARY KEY AUTO_INCREMENT,
       customer_name VARCHAR(50)
       ) ENGINE = InnoDB;
      

      次の出力が表示されます:

      
      Query OK, 0 rows affected (0.07 sec)
      
    6. 次に、customersにデータを入力します 3つのレコードを持つテーブル。以下のINSERTを実行します コマンドを1つずつ:

      INSERT INTO customers (customer_name) VALUES ('Leslie');
      INSERT INTO customers (customer_name) VALUES ('Andy');
      INSERT INTO customers (customer_name) VALUES ('Ben');
      

      以下の出力は、各レコードが挿入された後に表示されます。

      
      Query OK, 1 row affected (0.08 sec)
      ...
      
    7. このSELECTを実行して、サンプルレコードがデータベースに挿入されたことを確認します コマンド:

      SELECT * FROM customers;
      

      この出力が表示され、前の手順でデータが正常に挿入されたことを確認します。

      
      +-------------+---------------+
      | customer_id | customer_name |
      +-------------+---------------+
      |           1 | Leslie        |
      |           2 | Andy          |
      |           3 | Ben           |
      +-------------+---------------+
      3 rows in set (0.01 sec)
      
    8. 次に、salesを作成します テーブル。次のコマンドを実行します:

       CREATE TABLE sales
       (
       customer_id BIGINT PRIMARY KEY AUTO_INCREMENT,
       monthly_sales DECIMAL(17,2)
       ) ENGINE = InnoDB;
      

      この出力が表示されます:

      
      Query OK, 0 rows affected (0.07 sec)
      
    9. 次に、salesにデータを追加します テーブル。これらのコマンドを1つずつ実行します:

      INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27');
      INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32');
      INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63');
      

      各販売レコードを挿入すると、次の出力が表示されます:

      
      Query OK, 1 row affected (0.01 sec)
      ...
      
    10. 次に、SELECTを実行します 売上データがテーブルに挿入されたことを確認するためのクエリ:

      SELECT * FROM sales;
      

      この出力が表示され、前の手順で販売データが正常に挿入されたことを確認します。

      
      
      
      
      +-------------+---------------+
      | customer_id | monthly_sales |
      +-------------+---------------+
      |           1 |        500.27 |
      |           2 |       7600.32 |
      |           3 |      25879.63 |
      +-------------+---------------+
      3 rows in set (0.00 sec)
      

    作業するデータベースとテーブルを定義しました。次のセクションでは、MySQLビューの構文について説明します。

    MySQLビュー構文

    これは、MySQLビュー構文の簡略化されたバージョンです:

        CREATE
        VIEW view_name
        AS select_statement
    
    • view_name :MySQLビューの名前はここで定義する必要があります。後でビューの機能を思い出せるように、わかりやすい名前を使用することをお勧めします。

    • select_statement :これは、定義されたビューと結合されたSQLクエリです。ビューが呼び出されると、MySQLはこのクエリを実行してレコードセットを返します。

    MySQLビューの作成

    このセクションでは、MySQLビューの例を示します。このビューは、月間売上高に応じて、サンプルデータベースから顧客を分類するために使用されます。

    MySQLサーバーにログインしていることを確認してください。次に、以下のコマンドを実行してcustomers_membershipを作成します ビュー:

    CREATE
    VIEW customers_membership
    AS SELECT sales.customer_id,
    customer_name,
    (IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
    FROM sales
    LEFT JOIN customers
    ON sales.customer_id = customers.customer_id;
    

    ビューが正常に作成されると、次のような出力が表示されます。

    
    Query OK, 0 rows affected (0.01 sec)
    

    上記のMySQLコマンドは、customers_membershipという名前のビューを作成します customersに参加します およびsales PRIMARY KEYを含むテーブル customer_id 。論理的なIF(expression, value_if_true, value_if_false) ステートメントロジックは、月間売上から顧客のメンバーシップを決定するために使用されます:

    • 顧客の売上が5,000以上の場合、ビューは顧客をPREMIUMとして分類します。 メンバー。

    • それ以外の場合(売上が5,000未満の場合 )、顧客はBASICとして分類されます メンバー。

    customers_membership これで、ビューがデータベースに保存されます。次のセクションでは、ベーステーブルに直接クエリを実行せずにMySQLビューを呼び出してレコードセットを表示する方法を示します。

    MySQLビューの呼び出し

    このセクションでは、上記で作成したMySQLビューを呼び出して、期待どおりに機能することを確認する方法を示します。ビューが作成されると、データベースオブジェクトとして表示され、SELECTを使用して呼び出すことができます。 ステートメント。

    1. customers_membershipを呼び出すには 表示、実行:

      SELECT * FROM customers_membership;
      

      ビューが期待どおりに機能している場合は、生成されたmembershipを持つ顧客のリストが表示されます。 売上に基づく値。 Leslie以降 の売上は5000(500.27)を下回り、ビューは顧客のメンバーシップをBASICとして出力します。 。 Andy およびBen の売上はそれぞれ7600.32と25879.63であり、これによりPREMIUM メンバー:

      
      +-------------+---------------+------------+
      | customer_id | customer_name | membership |
      +-------------+---------------+------------+
      |           1 | Leslie        | BASIC      |
      |           2 | Andy          | PREMIUM    |
      |           3 | Ben           | PREMIUM    |
      +-------------+---------------+------------+
      3 rows in set (0.00 sec)
      
    2. ベーステーブルデータが更新され、MySQLビューを再度呼び出すと、最新の情報が表示されます。ビューはベーステーブルから情報を取得し、データを保存しません。ビューがベーステーブルから更新された情報を取得する方法を示すために、Rajieという名前の別の顧客を追加します customersへ テーブル:

      INSERT INTO customers (customer_name) VALUES ('Rajie');
      

      この出力が表示されます:

      
      Query OK, 1 row affected (0.01 sec)
      
    3. 次に、顧客の月次売上情報を売上テーブルに追加します。

      INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
      

      この出力が表示されます:

      
      Query OK, 1 row affected (0.01 sec)
      
    4. 次に、customers_membershipを呼び出します もう一度見る:

      SELECT * FROM customers_membership;
      

      以下の出力が表示されます。これは、ビューが変更を取得し、新しい顧客の情報を期待どおりに取得できることを確認します。

      
      +-------------+---------------+------------+
      | customer_id | customer_name | membership |
      +-------------+---------------+------------+
      |           1 | Leslie        | BASIC      |
      |           2 | Andy          | PREMIUM    |
      |           3 | Ben           | PREMIUM    |
      |           4 | Rajie         | BASIC      |
      +-------------+---------------+------------+
      4 rows in set (0.00 sec)
      

      上記のビューレコードセットでわかるように、Rajieという名前の新しい顧客ができました。 BASICを使用 メンバーシップ。

    MySQLビューの削除

    他のデータベースオブジェクトと同様に、ビューが不要になった場合は削除できます。これは、MySQLビューを削除するための基本的な構文です:

        DROP VIEW IF EXISTS view_name;
    
    1. MySQLビューを削除する前に、まず以下のコマンドを実行してその名前を特定します。

      SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
      

      現在選択されているデータベース内のすべてのビューのリストが表示されます:

      
      +---------------------------+------------+
      | Tables_in_sample_database | Table_type |
      +---------------------------+------------+
      | customers_membership      | VIEW       |
      +---------------------------+------------+
      1 row in set (0.01 sec)
      
    2. この場合、ドロップするビューの名前はcustomers_membershipです。 。したがって、削除するには、次のコマンドを実行します:

      DROP VIEW IF EXISTS customers_membership;
      

      ビューがデータベースから削除された後、以下の出力が表示されることを確認してください。

      
      Query OK, 0 rows affected (0.01 sec)
      
      IF EXISTSを使用せずに存在しないMySQLビューを削除しようとすると、注意してください キーワード、MySQLはエラーをスローします。
    3. 手順1のコマンドを再度実行すると、結果は表示されないはずです。

      SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
      
      
      Empty set (0.000 sec)
      

    詳細情報

    このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。

    • MySQL-ビューの使用

    1. ONLY_FULL_GROUP_BYを無効にする

    2. データベースセキュリティのためのPercona監査ログプラグインの使用

    3. SQL Serverのデータベースですべてのチェックキーと外部キーの制約を無効にする方法(T-SQLの例)

    4. MySQLは複数の文字を置き換えることができますか?