sql >> Databáze >  >> RDS >> Mysql

Jak používat pohledy v databázi MySQL

zobrazení v MySQL je pojmenovaný dotaz, který lze spustit pro zobrazení dat uložených v jiných tabulkách. Jinými slovy, pohledy jsou uživatelem definované virtuální tabulky. Pohledy lze použít k:

  • Zlepšete zabezpečení databáze. Pokud vaše databáze obsahuje citlivé informace, které je třeba zabezpečit, použití zobrazení vám pomůže izolovat data. Pohled lze vytvořit s předdefinovanou sadou výsledků a uživatelům můžete udělit přístup pouze k tomuto pohledu, nikoli k tabulce, která obsahuje citlivé informace.
  • Přesuňte složitou obchodní logiku na databázový server. Namísto kódování často používané softwarové logiky v různých klientech může vývojář přesunout logiku na úroveň databáze pomocí pohledu. Například lze vytvořit pohled pro zobrazení klasifikace zákazníků v závislosti na jejich celkových tržbách.
  • Snižte rozptylování dat. Zobrazení může kombinovat výsledky z různých tabulek a zobrazit relevantní sloupce pouze při vyvolání.

V této příručce se dozvíte:

  • Jak je strukturována syntaxe pohledu MySQL.
  • Jak vytvořit pohled MySQL.
  • Jak vyvolat zobrazení MySQL.
  • Jak zrušit zobrazení v MySQL.

Než začnete

Chcete-li pokračovat v této příručce, ujistěte se, že máte následující:

  1. Linode, na kterém spustíte software MySQL. Chcete-li vytvořit Linode, můžete postupovat podle příručky Začínáme s Linode.

  2. Serverový software MySQL (nebo MariaDB) nainstalovaný na vašem Linode. Podívejte se prosím do sekce MySQL, která obsahuje průvodce popisující, jak nainstalovat MySQL na několik distribucí Linuxu.

Příprava databáze

Než vytvoříte pohledy MySQL, vytvořte ukázkovou databázi, definujte několik tabulek a naplňte je nejprve daty:

  1. SSH do vašeho Linode. Poté zadejte tento příkaz pro přihlášení do MySQL jako uživatel root:

    mysql -u root -p
    

    Po zobrazení výzvy zadejte heslo uživatele root vašeho serveru MySQL a stiskněte Enter pokračovat.

    Poznámka

    Pokud vaše heslo nebude přijato, možná budete muset spustit předchozí příkaz pomocí sudo :

    sudo mysql -u root -p
    
  2. Pokud je vaše heslo přijato, měli byste vidět výzvu MySQL:

    
    mysql >
    
    Poznámka

    Pokud používáte MariaDB, může se vám místo toho zobrazit výzva podobná následující:

    
    MariaDB [(none)]>
    
  3. Dále spusťte tento příkaz SQL a vytvořte ukázkovou databázi s názvem sample_database :

    CREATE DATABASE sample_database;
    

    Měli byste vidět tento výstup, který potvrzuje, že databáze byla úspěšně vytvořena:

    
    Query OK, 1 row affected (0.02 sec)
    
  4. Vyberte sample_database databáze:

    USE sample_database;
    

    Měli byste vidět tento výstup:

    
    Database changed
    
  5. Spuštěním tohoto příkazu vytvoříte customers tabulka:

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

    Měli byste vidět tento výstup:

    
    Query OK, 0 rows affected (0.07 sec)
    
  6. Dále vyplňte customers tabulka se třemi záznamy. Spusťte níže uvedený příkaz INSERT příkazy jeden po druhém:

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

    Po vložení každého záznamu se zobrazí výstup níže:

    
    Query OK, 1 row affected (0.08 sec)
    ...
    
  7. Zajistěte, aby byly ukázkové záznamy vloženy do databáze spuštěním tohoto SELECT příkaz:

    SELECT * FROM customers;
    

    Zobrazí se tento výstup, který potvrzuje, že data byla úspěšně vložena v předchozím kroku:

    
    +-------------+---------------+
    | customer_id | customer_name |
    +-------------+---------------+
    |           1 | Leslie        |
    |           2 | Andy          |
    |           3 | Ben           |
    +-------------+---------------+
    3 rows in set (0.01 sec)
    
  8. Dále vytvořte sales stůl. Spusťte tento příkaz:

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

    Zobrazí se tento výstup:

    
    Query OK, 0 rows affected (0.07 sec)
    
  9. Poté přidejte některá data do sales stůl. Spusťte tyto příkazy jeden po druhém:

    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');
    

    Po vložení každého záznamu o prodeji se objeví tento výstup:

    
    Query OK, 1 row affected (0.01 sec)
    ...
    
  10. Dále spusťte SELECT dotaz na ověření, že údaje o prodeji byly vloženy do tabulky:

    SELECT * FROM sales;
    

    Zobrazí se tento výstup, který potvrzuje, že údaje o prodeji byly úspěšně vloženy v předchozím kroku:

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

Definovali jste databázi a tabulky, se kterými se má pracovat. Další část popisuje syntaxi pohledu MySQL.

Syntaxe zobrazení MySQL

Toto je zjednodušená verze syntaxe zobrazení MySQL:

    CREATE
    VIEW view_name
    AS select_statement
  • view_name :Zde musí být definován název pohledu MySQL. Je vhodné použít popisný název, abyste si později zapamatovali funkci pohledu.

  • select_statement :Toto je dotaz SQL, který je spojen s definovaným pohledem. Když je zobrazení vyvoláno, MySQL spustí tento dotaz, aby vrátil sadu záznamů.

Vytvoření zobrazení MySQL

Tato část představuje příklad zobrazení MySQL. Toto zobrazení se používá ke klasifikaci zákazníků z vaší vzorové databáze v závislosti na jejich počtu měsíčních prodejů.

Ujistěte se, že jste přihlášeni k serveru MySQL. Poté spusťte níže uvedený příkaz a vytvořte customers_membership zobrazit:

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;

Pokud je pohled vytvořen úspěšně, měli byste vidět výstup zobrazený níže:


Query OK, 0 rows affected (0.01 sec)

Výše uvedený příkaz MySQL vytvoří pohled s názvem customers_membership která se připojí k customers a sales tabulka s PRIMARY KEY customer_id . Logický IF(expression, value_if_true, value_if_false) logika výpisu se používá k určení členství zákazníka z jeho měsíčního prodeje:

  • Pokud jsou tržby zákazníka rovné nebo vyšší než 5 000, zobrazení klasifikuje zákazníka jako PREMIUM člen.

  • V opačném případě (pokud jsou prodeje nižší než 5,000 ), zákazník je klasifikován jako BASIC člen.

customers_membership pohled je nyní uložen do databáze. Další část ukazuje, jak zavolat pohled MySQL a zobrazit sadu záznamů bez přímého dotazování na základní tabulky.

Vyvolání zobrazení MySQL

Tato část ukazuje, jak vyvolat pohled MySQL, který jste vytvořili výše, a potvrdit, že funguje podle očekávání. Jakmile je pohled vytvořen, je viditelný jako databázový objekt a lze jej volat pomocí SELECT prohlášení.

  1. Chcete-li vyvolat customers_membership zobrazit, spustit:

    SELECT * FROM customers_membership;
    

    Pokud zobrazení funguje podle očekávání, měli byste nyní vidět seznam zákazníků s jejich vygenerovaným membership hodnoty založené na jejich prodeji. Od Leslie prodeje byly nižší než 5 000 (500,27), zobrazení ukazuje, že členství zákazníka je BASIC . Andy a Ben tržby společnosti byly 7600,32 a 25879,63 v tomto pořadí, což z nich dělá PREMIUM členové:

    
    +-------------+---------------+------------+
    | customer_id | customer_name | membership |
    +-------------+---------------+------------+
    |           1 | Leslie        | BASIC      |
    |           2 | Andy          | PREMIUM    |
    |           3 | Ben           | PREMIUM    |
    +-------------+---------------+------------+
    3 rows in set (0.00 sec)
    
  2. Jakmile jsou data základní tabulky aktualizována a znovu vyvoláte pohled MySQL, měli byste vidět nejnovější informace. Pohledy čerpají informace ze svých základních tabulek a neukládají data. Chcete-li předvést, jak pohled získává aktualizované informace ze základních tabulek, přidejte dalšího zákazníka s názvem Rajie customers tabulka:

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

    Zobrazí se tento výstup:

    
    Query OK, 1 row affected (0.01 sec)
    
  3. Poté přidejte informace o měsíčním prodeji zákazníka do tabulky prodeje:

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

    Zobrazí se tento výstup:

    
    Query OK, 1 row affected (0.01 sec)
    
  4. Dále vyvolejte customers_membership zobrazit znovu:

    SELECT * FROM customers_membership;
    

    Zobrazí se výstup níže, který potvrzuje, že zobrazení je schopno zachytit změny a získat informace o nových zákaznících podle očekávání:

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

    Jak můžete vidět v sadě záznamů zobrazení výše, nyní máte nového zákazníka s názvem Rajie s BASIC členství.

Vypuštění zobrazení MySQL

Stejně jako ostatní databázové objekty můžete pohledy odstranit, pokud je již nepotřebujete. Toto je základní syntaxe pro zrušení pohledu MySQL:

    DROP VIEW IF EXISTS view_name;
  1. Před zrušením pohledu MySQL nejprve identifikujte jeho název spuštěním příkazu níže:

    SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
    

    Zobrazí se seznam všech pohledů v aktuálně vybrané databázi:

    
    +---------------------------+------------+
    | Tables_in_sample_database | Table_type |
    +---------------------------+------------+
    | customers_membership      | VIEW       |
    +---------------------------+------------+
    1 row in set (0.01 sec)
    
  2. V tomto případě je název pohledu, který chcete zrušit, customers_membership . Chcete-li jej odstranit, spusťte:

    DROP VIEW IF EXISTS customers_membership;
    

    Ujistěte se, že se po odstranění pohledu z databáze zobrazí níže uvedený výstup:

    
    Query OK, 0 rows affected (0.01 sec)
    
    Poznámka Upozorňujeme, že pokud se pokusíte odstranit pohled MySQL, který neexistuje, bez použití IF EXISTS klíčové slovo, MySQL vyvolá chybu.
  3. Po opětovném spuštění příkazu z kroku 1 by nyní neměly být žádné výsledky:

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

Další informace

Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.

  • MySQL – používání pohledů

  1. Sdružování připojení databáze Celery Worker

  2. Použití fulltextového vyhledávání v SQL Server 2008 ve více tabulkách, sloupcích

  3. Jak používat model strojového učení KNN s 2UDA – PostgreSQL a Orange (část 1)

  4. Vyhněte se duplicitám v dotazu INSERT INTO SELECT na serveru SQL Server