Una vista en MySQL es una consulta con nombre que se puede activar para mostrar datos almacenados en otras tablas. En otras palabras, las vistas son tablas virtuales definidas por el usuario. Las vistas se pueden utilizar para:
- Mejore la seguridad de la base de datos. Si su base de datos contiene información confidencial que debe protegerse, el uso de una vista lo ayuda a aislar los datos. Se puede crear una vista con un conjunto de resultados predefinido y puede otorgar a los usuarios acceso solo a esa vista, en lugar de a la tabla que contiene información confidencial.
- Mueva la lógica empresarial compleja al servidor de la base de datos. En lugar de codificar la lógica de software de uso frecuente en diferentes clientes, un desarrollador puede mover la lógica al nivel de la base de datos mediante una vista. Por ejemplo, se puede crear una vista para mostrar las clasificaciones de los clientes según sus ventas totales.
- Reduzca la distracción de datos. Una vista puede combinar resultados de diferentes tablas y solo mostrar las columnas relevantes cuando se invoca.
En esta guía aprenderá:
- Cómo está estructurada la sintaxis de una vista MySQL.
- Cómo crear una vista MySQL.
- Cómo invocar una vista MySQL.
- Cómo soltar una vista en MySQL.
Antes de comenzar
Para seguir esta guía, asegúrese de tener lo siguiente:
-
Un Linode, en el que ejecuta el software MySQL. Puede seguir la guía Introducción a Linode para aprovisionar un Linode.
-
El software del servidor MySQL (o MariaDB) instalado en su Linode. Consulte la sección MySQL, que contiene guías que describen cómo instalar MySQL en varias distribuciones de Linux.
Preparando la base de datos
Antes de crear sus vistas de MySQL, cree una base de datos de muestra, defina algunas tablas y complételas primero con algunos datos:
-
SSH a su Linode. Luego, ingrese este comando para iniciar sesión en MySQL como usuario root:
mysql -u root -p
Cuando se le solicite, ingrese la contraseña raíz de su servidor MySQL y presione Enter para continuar.
Nota
Si no se acepta su contraseña, es posible que deba ejecutar el comando anterior con
sudo
:sudo mysql -u root -p
-
Si se acepta su contraseña, debería ver el aviso de MySQL:
mysql >
Nota
Si está utilizando MariaDB, es posible que vea un mensaje como el siguiente:
MariaDB [(none)]>
-
A continuación, ejecute este comando SQL para crear una base de datos de muestra que se llame
sample_database
:CREATE DATABASE sample_database;
Debería ver este resultado, que confirma que la base de datos se creó correctamente:
Query OK, 1 row affected (0.02 sec)
-
Seleccione la
sample_database
base de datos:USE sample_database;
Deberías ver este resultado:
Database changed
-
Ejecute este comando para crear un
customers
tabla:CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;
Deberías ver este resultado:
Query OK, 0 rows affected (0.07 sec)
-
A continuación, complete los
customers
tabla con tres registros. Ejecute el siguienteINSERT
comandos uno por uno:INSERT INTO customers (customer_name) VALUES ('Leslie'); INSERT INTO customers (customer_name) VALUES ('Andy'); INSERT INTO customers (customer_name) VALUES ('Ben');
El siguiente resultado se muestra después de insertar cada registro:
Query OK, 1 row affected (0.08 sec) ...
-
Asegúrese de que los registros de muestra se hayan insertado en la base de datos ejecutando este
SELECT
comando:SELECT * FROM customers;
Aparece este resultado, que confirma que los datos se insertaron correctamente en el paso anterior:
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
A continuación, cree un
sales
mesa. Ejecute este comando:CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE = InnoDB;
Aparece esta salida:
Query OK, 0 rows affected (0.07 sec)
-
Luego, agregue algunos datos a las
sales
mesa. Ejecute estos comandos uno por uno: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');
Después de insertar cada registro de ventas, aparece este resultado:
Query OK, 1 row affected (0.01 sec) ...
-
A continuación, ejecute un
SELECT
consulta para verificar que los datos de ventas se insertaron en la tabla:SELECT * FROM sales;
Aparece este resultado, que confirma que los datos de ventas se insertaron correctamente en el paso anterior:
+-------------+---------------+ | customer_id | monthly_sales | +-------------+---------------+ | 1 | 500.27 | | 2 | 7600.32 | | 3 | 25879.63 | +-------------+---------------+ 3 rows in set (0.00 sec)
Ha definido la base de datos y las tablas para trabajar. La siguiente sección describe la sintaxis de una vista MySQL.
La sintaxis de vista de MySQL
Esta es una versión simplificada de la sintaxis de la vista de MySQL:
CREATE
VIEW view_name
AS select_statement
-
view_name
:El nombre de la vista MySQL debe definirse aquí. Es recomendable utilizar un nombre descriptivo para que luego pueda recordar la función de la vista. -
select_statement
:Esta es la consulta SQL que se acopla con la vista definida. Cuando se invoca la vista, MySQL ejecuta esta consulta para devolver un conjunto de registros.
Creando una Vista MySQL
Esta sección presenta un ejemplo de vista de MySQL. Esta vista se utiliza para clasificar a los clientes de su base de datos de muestra, según su número de ventas mensuales.
Asegúrese de haber iniciado sesión en su servidor MySQL. Luego, ejecute el siguiente comando para crear un customers_membership
ver:
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;
Si la vista se crea correctamente, debería ver el resultado que se muestra a continuación:
Query OK, 0 rows affected (0.01 sec)
El comando MySQL anterior crea una vista llamada customers_membership
que se une a los customers
y sales
tabla con la PRIMARY KEY
customer_id
. El IF(expression, value_if_true, value_if_false)
La lógica del estado de cuenta se usa para determinar la membresía del cliente a partir de sus ventas mensuales:
-
Si las ventas de un cliente son iguales o superiores a 5000, la vista clasifica al cliente como
PREMIUM
miembro. -
De lo contrario (si las ventas están por debajo de
5,000
) ), el cliente se clasifica comoBASIC
miembro.
El customers_membership
La vista ahora está guardada en la base de datos. La siguiente sección muestra cómo llamar a una vista de MySQL y mostrar un juego de registros sin consultar las tablas base directamente.
Invocar una vista MySQL
Esta sección muestra cómo invocar la vista de MySQL que creó anteriormente y confirmar que funciona como se esperaba. Una vez que se crea una vista, es visible como un objeto de base de datos y se puede llamar usando SELECT
declaración.
-
Para invocar el
customers_membership
ver, ejecutar:SELECT * FROM customers_membership;
Si la vista funciona como se esperaba, ahora debería ver una lista de clientes con su
membership
generada valores basados en sus ventas. DesdeLeslie
las ventas de estaban por debajo de 5000 (500.27), la vista muestra la membresía del cliente comoBASIC
.Andy
yBen
Las ventas de fueron 7600.32 y 25879.63 respectivamente y esto los convierte enPREMIUM
miembros:+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | +-------------+---------------+------------+ 3 rows in set (0.00 sec)
-
Una vez que se actualizan los datos de la tabla base y vuelve a invocar una vista de MySQL, debería ver la información más reciente. Las vistas extraen información de sus tablas base y no almacenan los datos. Para demostrar cómo una vista extrae información actualizada de las tablas base, agregue otro cliente llamado
Rajie
a loscustomers
tabla:INSERT INTO customers (customer_name) VALUES ('Rajie');
Aparece esta salida:
Query OK, 1 row affected (0.01 sec)
-
Luego, agregue la información de ventas mensuales del cliente a la tabla de ventas:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
Aparece esta salida:
Query OK, 1 row affected (0.01 sec)
-
A continuación, invoque el
customers_membership
ver de nuevo:SELECT * FROM customers_membership;
Aparece el siguiente resultado, que confirma que la vista puede recoger los cambios y extraer la información de los nuevos clientes como se esperaba:
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | | 4 | Rajie | BASIC | +-------------+---------------+------------+ 4 rows in set (0.00 sec)
Como puede ver en el conjunto de registros de vista anterior, ahora tiene un nuevo cliente llamado
Rajie
con unBASIC
membresía.
Soltar una vista MySQL
Al igual que otros objetos de la base de datos, puede eliminar vistas si ya no las necesita. Esta es la sintaxis básica para soltar una vista de MySQL:
DROP VIEW IF EXISTS view_name;
-
Antes de colocar una vista de MySQL, primero identifique su nombre ejecutando el siguiente comando:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Aparece una lista de todas las vistas en la base de datos actualmente seleccionada:
+---------------------------+------------+ | Tables_in_sample_database | Table_type | +---------------------------+------------+ | customers_membership | VIEW | +---------------------------+------------+ 1 row in set (0.01 sec)
-
En este caso, el nombre de la vista que desea descartar es
customers_membership
. Entonces, para eliminarlo, ejecute:DROP VIEW IF EXISTS customers_membership;
Asegúrese de que se muestre el siguiente resultado después de eliminar la vista de la base de datos:
Query OK, 0 rows affected (0.01 sec)
Nota Tenga en cuenta que si intenta eliminar una vista de MySQL que no existe sin utilizar
IF EXISTS
palabra clave, MySQL arroja un error. -
Cuando se vuelve a ejecutar el comando del paso 1, ahora no debería haber resultados:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
Más información
Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.
- MySQL:uso de vistas