Изглед в MySQL е наименувана заявка, която може да се задейства за показване на данни, съхранявани в други таблици. С други думи, изгледите са дефинирани от потребителя виртуални таблици. Изгледите могат да се използват за:
- Подобрете сигурността на базата данни. Ако вашата база данни съдържа чувствителна информация, която трябва да бъде защитена, използването на изглед ви помага да изолирате данните. Изглед може да бъде създаден с предварително дефиниран набор от резултати и можете да предоставите на потребителите достъп само до този изглед, вместо до таблицата, която съдържа поверителна информация.
- Преместете сложна бизнес логика към сървъра на базата данни. Вместо да кодира често използвана софтуерна логика в различни клиенти, разработчикът може да премести логиката на ниво база данни, използвайки изглед. Например може да се създаде изглед за показване на класификации на клиенти в зависимост от общите им продажби.
- Намалете разсейването на данните. Изгледът може да комбинира резултати от различни таблици и да показва съответните колони само при извикване.
В това ръководство ще научите:
- Как е структуриран синтаксисът на изглед на MySQL.
- Как да създадете изглед на MySQL.
- Как да извикате изглед на MySQL.
- Как да махнете изглед в MySQL.
Преди да започнете
За да следвате това ръководство, уверете се, че имате следното:
-
Linode, на който стартирате софтуера MySQL. Можете да следвате ръководството Първи стъпки с Linode, за да осигурите Linode.
-
MySQL сървърният софтуер (или MariaDB), инсталиран на вашия Linode. Моля, вижте раздела MySQL, който съдържа ръководства, които описват как да инсталирате MySQL в няколко Linux дистрибуции.
Подготовка на базата данни
Преди да създадете вашите MySQL изгледи, създайте примерна база данни, дефинирайте няколко таблици и първо ги попълнете с някои данни:
-
SSH към вашия Linode. След това въведете тази команда, за да влезете в MySQL като root потребител:
mysql -u root -p
Когато бъдете подканени, въведете root паролата на вашия MySQL сървър и натиснете Enter за да продължите.
Забележка
Ако паролата ви не е приета, може да се наложи да изпълните предишната команда с
sudo
:sudo mysql -u root -p
-
Ако вашата парола е приета, трябва да видите подканата за MySQL:
mysql >
Забележка
Ако използвате MariaDB, вместо това може да видите подкана като следната:
MariaDB [(none)]>
-
След това изпълнете тази SQL команда, за да създадете примерна база данни с име
sample_database
:CREATE DATABASE sample_database;
Трябва да видите този изход, който потвърждава, че базата данни е създадена успешно:
Query OK, 1 row affected (0.02 sec)
-
Изберете
sample_database
база данни:USE sample_database;
Трябва да видите този изход:
Database changed
-
Изпълнете тази команда, за да създадете
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)
-
След това попълнете
customers
таблица с три записа. Изпълнете долнияINSERT
команди една по една: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) ...
-
Уверете се, че примерните записи са били вмъкнати в базата данни, като изпълните този
SELECT
команда:SELECT * FROM customers;
Появява се този изход, който потвърждава, че данните са били вмъкнати успешно в предишната стъпка:
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
След това създайте
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)
-
След това добавете някои данни към
sales
маса. Изпълнете тези команди една по една: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) ...
-
След това стартирайте
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 View
Това е опростена версия на синтаксиса на 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)
логиката на изявленията се използва за определяне на членството на клиента от техните месечни продажби:
-
Ако продажбите на клиента са равни или над 5000, изгледът класифицира клиента като
PREMIUM
член. -
В противен случай (ако продажбите са под
5,000
), клиентът е класифициран катоBASIC
член.
customers_membership
изгледът вече е запазен в базата данни. Следващият раздел показва как да извикате изглед на MySQL и да покажете набор от записи, без да правите директно запитване към базовите таблици.
Извикване на изглед на MySQL
Този раздел показва как да извикате изгледа на MySQL, който сте създали по-горе, и да потвърдите, че работи според очакванията. След като изгледът е създаден, той се вижда като обект на база данни и може да бъде извикан с помощта на SELECT
изявление.
-
За да извикате
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)
-
След като данните на основната таблица се актуализират и отново извикате изглед на MySQL, трябва да видите най-новата информация. Изгледите изтеглят информация от своите основни таблици и не съхраняват данните. За да демонстрирате как изгледът извлича актуализирана информация от базовите таблици, добавете друг клиент на име
Rajie
наcustomers
таблица:INSERT INTO customers (customer_name) VALUES ('Rajie');
Появява се този изход:
Query OK, 1 row affected (0.01 sec)
-
След това добавете информация за месечните продажби на клиента към таблицата за продажби:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
Появява се този изход:
Query OK, 1 row affected (0.01 sec)
-
След това извикайте
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;
-
Преди да пуснете изглед на 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)
-
В този случай името на изгледа, който искате да премахнете, е
customers_membership
. Така че, за да го изтриете, изпълнете:DROP VIEW IF EXISTS customers_membership;
Уверете се, че изходът по-долу се показва, след като изгледът бъде изтрит от базата данни:
Query OK, 0 rows affected (0.01 sec)
Забележка Моля, обърнете внимание, ако се опитате да изтриете изглед на MySQL, който не съществува, без да използвате
IF EXISTS
ключова дума, MySQL извежда грешка. -
Когато командата от стъпка 1 се изпълни отново, вече не трябва да има резултати:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
Повече информация
Може да пожелаете да се консултирате със следните ресурси за допълнителна информация по тази тема. Въпреки че те са предоставени с надеждата, че ще бъдат полезни, моля, имайте предвид, че не можем да гарантираме за точността или навременността на външно хостваните материали.
- MySQL – Използване на изгледи