mysql---视图详解

提示:视图最大的优点用来协助用户提高查询效力以及保护数据安全

文章目录

    • 视图
    • 视图的优势:
    • 创建视图
      • 单表创建视图
      • 多表创建视图
    • 查看视图
    • 更新视图数据
    • 修改视图
    • 删除视图


视图

视图(View)是一个虚拟表,其内容由select查询定义。同真实的表一样,是一个select查询的结果集,所有数据来源于基表
视图其实就是一个select返回的结果集,用于方便我们查询而创建的"临时表",简化我们的查询语句

视图用来协助查询效力保护数据安全,创建视图定义数据来源基表select

视图的优势:

方便: 视图是select的结果集可以根据条件生成,从而提高了查询,用户就不用关注表的结构和复杂查询,
安全: 使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
数据独立: 一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;
**使用视图的大部分情况是为了保障数据安全性,提高查询效率;**

创建视图

单表创建视图

虽然视图可以被看成是一种虚拟表,但是其物理上是不存在的,即MySQL并没有专门的位置为视图存储数据。根据视图的概念可以发现其数据来源于查询语句
基本语法:

 CREATE[OR REPLACE] VIEW viewname[(columnlist)]   
    AS SELECT statement  

单表创建视图就是简单的一张表进行的select

create view  emp_view as select * from emp

as后面的select查询根据需要进行自定义创建视图

create view  emp_view as select * from emp  where id=100

create view  emp_view as select name from emp  where id=100

多表创建视图

CREATE[OR REPLACE] VIEW viewname[columnlist]   
    AS SELECT statement 

SELECT statement表示SELECT语句。与单表上创建视图不同的是,SELECT子句是涉及到多表的联合查询语句

create view view_student_teacher 
    as select class.id as teacher_id,teacher,class,student.id,student.name,sex 
    from class 
        left join student on class.id=student.class_id;

创建多表视图select设计到联表查询、子查询、复杂查询

查看视图

show tables

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp            |
| emp_view       |
+----------------+
2 rows in set (0.00 sec)

show create view emp_view;

mysql> show create view emp_view;
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View     | Create View                                                                                                                        | character_set_client | collation_connection |
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| emp_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `emp_view` AS select `emp`.`id` AS `id` from `emp` | utf8mb4              | utf8mb4_0900_ai_ci   |
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

show create view/table 语句查看视图创建信息、表创建信息

更新视图数据

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图实质是一个虚拟表,其中没有数据,通过视图更新时都是转换到基本表更新。更新视图时,只能更新权限范围内的数据,超出范围就不能更新了。

不能更新的情况
视图中包含SUM()、COUNT()、MAX()和MIN()等函数;
视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVING等关键字;
视图对应的表存在没有默认值的列,而且该列没有包含在视图里;
包含子查询的视图;
其他特殊情况

修改视图

修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图

注意,当真实表中修改了某个存在视图中的字段时,这个视图也需要跟着变,否则会变成无效的视图

删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。

DROP VIEW viewname [,viewnamen];

DROP VIEW 视图1,视图2可以进行批量删除视图

你可能感兴趣的:(mysql数据库高级知识,mysql,数据库)