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í:
-
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.
-
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:
-
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
-
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)]>
-
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)
-
Vyberte
sample_database
databáze:USE sample_database;
Měli byste vidět tento výstup:
Database changed
-
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)
-
Dále vyplňte
customers
tabulka se třemi záznamy. Spusťte níže uvedený příkazINSERT
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) ...
-
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)
-
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)
-
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) ...
-
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 jakoBASIC
č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í.
-
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. OdLeslie
prodeje byly nižší než 5 000 (500,27), zobrazení ukazuje, že členství zákazníka jeBASIC
.Andy
aBen
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)
-
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)
-
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)
-
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
sBASIC
č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;
-
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)
-
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. -
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ů