MySQL 视图

环境说明

MySQL8.0.16 image.png


MySQL 从 5.0 开始就提供了视图功能,下面对视图功能进行介绍。

视图

视图的英文名称是 view,它是一种虚拟存在的表。视图对于用户来说是透明的,它并不在数据库中实际存在,视图是使用数据库行和列动态组成的表。
视图相对于普通的表来说,优势包含下面这几项

  • 使用视图可以简化操作:使用视图不用关注表结构的定义,把经常使用的数据集合定义成视图,这样能够简化操作。
  • 安全性:用户对视图不可以随意的更改和删除,可以保证数据的安全性。
  • 数据独立性:一旦视图的结构 确定了, 可以屏蔽表结构变化对用户的影响, 数据库表增加列对视图没有影响;具有一定的独立性

    对视图的操作

    视图的操作包括创建或者修改视图、删除视图以及查看视图定义。
    先创建一张表 product 表,有三个字段,id,name,price,下面是建表语句
    1. mysql> create table product(id int(11),name varchar(20),price float(10,2));
    2. Query OK, 0 rows affected (0.03 sec)
    然后插入几条数据
    1. mysql> insert into product values(1, "apple","3.5"),(2,"banana","4.2"),(3,"melon","1.2");
    2. Query OK, 3 rows affected (0.01 sec)
    3. Records: 3 Duplicates: 0 Warnings: 0
    插入完成后的表结构如下
    image.png

    创建视图

    1. mysql> create view v1 as select * from product;
    2. Query OK, 0 rows affected (0.01 sec)
    查看一下 v1 视图的结构
    image.png
    可以看到 把 product 中的数据放在了视图中,也相当于是创建了一个 product 的副本,只不过这个副本跟表无关。
    视图使用
    1. mysql> show tables;
    2. +----------------+
    3. | Tables_in_test |
    4. +----------------+
    5. | blob_test |
    6. | emp |
    7. | float_test |
    8. | product |
    9. | user |
    10. | v1 |
    11. +----------------+
    12. 6 rows in set (0.00 sec)
    也能看到所有的视图。
    image.png

    删除视图

    1. drop view v1;
    image.png
    能够直接进行删除。

    查看视图,查看表结构

    可以使用Describe ViewName;
    1. mysql> desc v1;
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | id | int(11) | YES | | NULL | |
    6. | name | varchar(20) | YES | | NULL | |
    7. | price | float(10,2) | YES | | NULL | |
    8. +-------+-------------+------+-----+---------+-------+
    9. 3 rows in set (0.00 sec)
    image.png

    更新视图

    ```sql mysql> update v1 set name = “grape” where id = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from v1; +———+————+———-+ | id | name | price | +———+————+———-+ | 1 | grape | 3.50 | | 2 | banana | 4.20 | | 3 | melon | 1.20 | +———+————+———-+ 3 rows in set (0.00 sec)

mysql> select * from product; +———+————+———-+ | id | name | price | +———+————+———-+ | 1 | grape | 3.50 | | 2 | banana | 4.20 | | 3 | melon | 1.20 | +———+————+———-+ 3 rows in set (0.00 sec) ``` image.png