|
Le concept de vue
Une vue est une table virtuelle qui ne possède pas de données elle-même et occupe très peu d'espace mémoire.
Les vues sont construites sur des tables existantes, et ces tables sur lesquelles les vues sont construites sont appelées tables de base.
La création et la suppression de vues n'affectent que la vue elle-même et n'affectent pas la table de base correspondante. Lorsque des opérations d'ajout, de suppression, de modification (DML) sont effectuées sur la vue, les données de la vue seront mises à jour en conséquence, et vice versa, les données de la table de données changeront également.
L'instruction selon laquelle la vue fournit le contenu des données est l'instruction SELECT. La vue peut être comprise comme une instruction SELECT stockée
Dans la base de données, la vue n'enregistre pas le contenu des données. données, les données sont en fait enregistrées dans la feuille de données. Si vous ajoutez, supprimez ou modifiez des données dans la table de données, les données de la vue changeront en conséquence. vice versa.
View est une autre forme d'expression qui fournit aux utilisateurs des données de table de base. Dans des circonstances normales, la base de données des petits projets n'a pas besoin d'utiliser des vues, mais dans les grands projets et lorsque les tables de données sont relativement complexes, la valeur des vues devient importante. améliorer l'efficacité de l'utilisation. Il est très simple à comprendre et à utiliser.
Créer une vue
L'alias du champ dans l'instruction de requête apparaîtra comme un alias de la vue
CREATE VIEW vu_emps
AS
SELECT employee_id,last_name,salary
FROM emps;
CREATE VIEW vu_emps2(emp_id,name,monthly_sal)
AS
SELECT employee_id,last_name,salary
FROM emps;
Création de vue pour plusieurs tables
CREATE VIEW vu_emp_dept
AS
SELECT employee_id,e.department_id,department_name
FROM emps e JOIN depts d
ON e.department_id = d.department_id;
SELECT * FROM vu_emp_dept;
Utiliser des vues pour formater les données
CREATE VIEW vu_emp_dept1
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;
Créer des vues basées sur des vues
CREATE VIEW vu_emp4
AS
SELECT department_id,department_name FROM vu_emp_dept;
SELECT * FROM vu_emp4;
Afficher les vues
Afficher la table de la base de données objets, vues Objet
SHOW TABLES;
Afficher la structure de la base de données
DESC vu_emp4;
Afficher les informations d'attribut des données
mysql> SHOW TABLE STATUS LIKE 'vu_emp4'\G;
*************************** 1. row ***************************
Name: vu_emp4
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
ERROR:
No query specified
Afficher les informations de définition détaillées de la vue
mysql> SHOW CREATE VIEW vu_emp4\G;
*************************** 1. row ***************************
View: vu_emp4
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `vu_emp4` AS select `vu_emp_dept`.`department_id` AS `department_id`,`vu_emp_dept`.`department_name` AS `department_name` from `vu_emp_dept`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)
ERROR:
No query specified
#🎜🎜 #Mettre à jour les données de la vueLa mise à jour des données dans la vue entraînera la modification des données dans la table de baseLa mise à jour des données dans la table entraînera également à la modification des données dans la vue# 🎜🎜#Pour qu'une vue soit actualisable, chaque ligne de la vue doit correspondre à une ligne de la table sous-jacente et il doit y avoir un one-to-one relation entre les deux. De plus, la vue ne prend pas en charge les opérations de mise à jour lorsque les conditions suivantes se produisent dans la définition de la vue :
Si "ALGORITHM = TEMPTABLE" est spécifié lors de la définition de la vue, le la vue ne prendra pas en charge les opérations INSERT et DELETE ; La vue ne contient pas toutes les colonnes de la table de base qui sont définies comme non vides et n'ont aucune valeur par défaut spécifiée, et la vue ne prendra pas en charge l'opération INSERT ; #🎜🎜 #-
Si une requête conjointe JOIN est utilisée dans l'instruction SELECT qui définit la vue, la vue ne prendra pas en charge INSERT et DELETE. opérations;
-
#🎜🎜 #Si des expressions mathématiques ou des sous-requêtes sont utilisées dans la liste de champs après l'instruction SELECT qui définit la vue, la vue ne prendra pas en charge INSERT, ni UPDATE. valeurs de champ qui utilisent des expressions mathématiques ou des sous-requêtes ;
#🎜🎜 #
- Utilisez DISTINCT, la fonction d'agrégation, GROUP BY, HAVING, UNION, etc. dans la liste de champs après l'instruction SELECT ; qui définit la vue, la vue ne prendra pas en charge INSERT, UPDATE, DELETE ;
#🎜 🎜#
Si l'instruction SELECT qui définit la vue contient une sous-requête et que la sous-requête fait référence à la table après FROM, la vue ne prendra pas en charge INSERT, UPDATE et DELETE ; - #🎜🎜 #La définition de la vue est basée sur une vue non modifiable ;
-
Bien que les vues puissent mettre à jour les données, en général, les vues en tant que tables virtuelles sont principalement utilisées pour faciliter les requêtes, et il n'est pas recommandé de mettre à jour les données des vues. Les modifications apportées aux données de vue sont effectuées en exploitant les données dans la table de données réelle.
- Modifier la vueMéthode 1 : Utiliser la clause CREATE OR REPLACE VIEW pour modifier la vue
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees
WHERE department_id = 80;
CREATE OR REPLACE VIEW vu_emp4
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;
Description : Alias pour chaque colonne du Clause CREATE VIEW Doit correspondre à chaque colonne de la sous-requête. Méthode 2 : ALTER VIEWLa syntaxe pour modifier la vue est :
ALTER VIEW view name
AS #🎜 🎜#Requête de requêteALTER VIEW vu_emp4
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM emps e JOIN depts d
ON e.department_id = d.department_id;
Supprimer la vue
DROP VIEW vu_emp4;
DROP VIEW IF EXISTS vu_emp1;
Avantages et inconvénients de la vue
Avantages :
# 🎜🎜#
Opération facile
Réduire la redondance des données
- Sécurité des données #🎜 🎜#
Adaptation aux besoins flexibles et changeants Capable de décomposer une logique de requête complexe- #🎜 🎜# Inconvénients :
-
Coût de maintenance élevé
-
Mauvaise lisibilité # 🎜🎜#