mysql---视图详解

本文介绍了视图在数据库中的作用,包括提高查询效率、数据安全性和数据独立性。讲解了如何创建单表和多表视图,查看视图信息,以及更新和删除视图的规则,强调了视图在权限管理和数据一致性中的应用。
摘要由CSDN通过智能技术生成

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


视图

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

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

视图的作用:

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

创建视图

单表创建视图

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

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

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

1、依赖基表创建视图

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

2、依赖视图创建视图

create view view2 as select * from view1;

相关的条件同上述基表创建雷同

多表创建视图

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可以进行批量删除视图

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值