提示:视图最大的优点用来协助用户提高查询效力以及保护数据安全
视图(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可以进行批量删除视图