Maison  >  Article  >  base de données  >  Introduction aux vues et opérations MySQL (avec code)

Introduction aux vues et opérations MySQL (avec code)

不言
不言avant
2019-04-15 11:26:473166parcourir

Cet article vous apporte une introduction à l'introduction et au fonctionnement des vues MySQL (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

1. Préparation

Créer deux tables balance (table balance) et client (table client) dans la base de données MySQL et insérer les données.

create table customer(
    id int(10) primary key,
    name char(20) not null,
    role char(20) not null,
    phone char(20) not null,
    sex char(10) not null,
    address char(50) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#外键为customerId
create table balance(
    id int(10) primary key,
    customerId int(10) not null,
    balance DECIMAL(10,2),
    foreign key(customerId) references customer(id) 

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

Insérez 3 éléments de données chacun dans la table client et la table solde.

insert into customer values(0001,"xiaoming",'vip1','12566666','male','江宁区888号');
insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建邺区888号');
insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888号');

insert into balance values(1,0001,900.55);
insert into balance values(2,0002,900.55);
insert into balance values(3,0003,10000);

2. Introduction à la vue

Une vue peut être simplement comprise comme une table virtuelle. Elle est différente de la table de données réelle dans la base de données. sur la requête de la table réelle. Les vues ont une structure similaire aux vraies tables. Les vues prennent également en charge des opérations telles que la mise à jour, l'interrogation et la suppression de tables réelles. Alors pourquoi avons-nous besoin de vues ?

a. Améliorez la sécurité de la table réelle : la vue est virtuelle, et vous ne pouvez accorder à l'utilisateur que les autorisations de la vue sans accorder les autorisations de la table réelle, ce qui joue un rôle dans la protection de la table réelle. tableau.
b. Affichage personnalisé des données : sur la base du même tableau réel, les données peuvent être personnalisées pour afficher les données aux utilisateurs ayant des besoins différents via différentes vues.
c.Opérations de données simplifiées : il convient aux scénarios dans lesquels les instructions de requête sont complexes et fréquemment utilisées, et peuvent être implémentées via des vues.
......

Il convient de noter que les opérations liées à la vue nécessitent que l'utilisateur dispose des autorisations correspondantes. Les opérations suivantes utilisent l'utilisateur root et l'utilisateur par défaut dispose des autorisations d'exploitation.

Créer la syntaxe de la vue

create view <视图名称>  as <select语句>;

Modifier la syntaxe de la vue

Pour modifier le nom de la vue, vous pouvez d'abord le supprimer, puis le créer avec la même instruction.

#更新视图结构
alter view <视图名称>  as <select语句>;
#更新视图数据相当于更新实际表,不适用基于多表创建的视图
update ....

Remarque : les données de certaines vues ne peuvent pas être mises à jour, c'est-à-dire qu'elles ne peuvent pas être mises à jour à l'aide de update, insert et d'autres instructions, telles que :

a, l'instruction select contient plusieurs tables
b , La vue contient la clause have
c. La vue contient le mot-clé distinct
...

Syntaxe de suppression de la vue

drop view <视图名称>

3. opérations

Créer une vue basée sur une seule table

mysql> create view  bal_view 
    -> as
    -> select * from  balance;
Query OK, 0 rows affected (0.22 sec)

Après la création, affichez la structure et les enregistrements de bal_view. On peut constater que les résultats obtenus en interrogeant les données via la vue sont exactement les mêmes que ceux obtenus en interrogeant via la table réelle.

#查询bal_view的结构
mysql> desc bal_view;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| id         | int(10)       | NO   |     | NULL    |       |
| customerId | int(10)       | NO   |     | NULL    |       |
| balance    | decimal(10,2) | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
3 rows in set (0.07 sec)
#查询bal_view中的记录
mysql> select  * from bal_view;
+----+------------+----------+
| id | customerId | balance  |
+----+------------+----------+
|  1 |          1 |   900.55 |
|  2 |          2 |   900.55 |
|  3 |          3 | 10000.00 |
+----+------------+----------+
3 rows in set (0.01 sec)

Il n'est pas difficile de tirer la conclusion de l'énoncé de création de la vue : lorsque les données de la table réelle changent, les données de la vue changeront également en conséquence. Ainsi, lorsque les données de la vue changent, les données de la table réelle changeront-elles ? Expérimentons et modifions le solde du client avec id=1 à 2000.

mysql> update bal_view set balance=2000 where id=1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Jetons un coup d'œil aux données du solde réel de la table.

mysql> select  * from bal_view where id=1;
+----+------------+---------+
| id | customerId | balance |
+----+------------+---------+
|  1 |          1 | 2000.00 |
+----+------------+---------+
1 row in set (0.03 sec)

Conclusion : lorsque les données de la table d'affichage changent, les données de la table réelle changent également.

Créez une vue basée sur plusieurs tables

Créez une vue cus_bal avec deux champs : nom du client et solde.

mysql> create view cus_bal
    -> (cname,bal)
    -> as
    -> select customer.name,balance.balance from customer ,balance
    -> where customer.id=balance.customerId;
Query OK, 0 rows affected (0.05 sec)
#查看cus_bal中的数据
mysql> select *  from  cus_bal;
+----------+----------+
| cname    | bal      |
+----------+----------+
| xiaoming |  2000.00 |
| xiaohong |   900.55 |
| xiaocui  | 10000.00 |
+----------+----------+
3 rows in set (0.28 sec)

Modifiez la vue

Changez le cname dans la vue cus_bal en cusname.

mysql> alter view  cus_bal
    -> (cusname,bal)
    -> as
    -> select customer.name,balance.balance from customer ,balance
    -> where customer.id=balance.customerId;
Query OK, 0 rows affected (0.06 sec)
#查看修改后视图结构。
mysql> desc  cus_bal;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| cusname | char(20)      | NO   |     | NULL    |       |
| bal     | decimal(10,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Modifier les vues créées en fonction de plusieurs tables

mysql> insert into cus_bal(cusname,bal) values ("ee",11);
ERROR 1393 (HY000): Can not modify more than one base table through a join view &#39;rms.cus_bal&#39;

Supprimer la vue

Supprimer la vue cus_bal

drop view cus_bal;
mysql> drop view cus_bal;
Query OK, 0 rows affected (0.00 sec)

[Recommandations associées :Tutoriel MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer