MySQL视图

xiaoxiao2021-02-28  111

MySQL视图

一、什么是视图

视图是一种虚拟存在的表,它并不在数据库中实际存在,而是在使用中动态生成的。

二、视图的作用

1、安全:使用视图用户只能访问到他们有权限访问的数据(具体到每一列),对表的权限管理不能具体到每一列。 2、简单:使用视图不用关心表的结构、关联条件和筛选条件,因为它是动态生成的,在定义视图的时候已经对相关语句进行了定义。 3、数据独立:视图可以屏蔽表结构变化对用户的影响,当表结构变化时,修改视图就好,不用修改业务代码,前提是业务代码查询的是视图,不是对表进行直接查询。

三、创建或修改视图

1、语法:

create view 视图名 as 查询语句 [with [cascaded | local] check option]

PS:[with [cascaded | local] check option]可以没有,默认是with cascaded check option

create or replace view user_view as select * from user;

2、不可更新视图

首先,我们来阐释一下视图更新。视图更新是指对视图中的数据进行修改,当视图中某个数据更新时,实质上就是对对应表上的数据进行修改,因为视图在物理中并不存在,而是根据表和试图创建语句动态生成的。视图修改则是对原有视图进行修改,实质上是创建一个同名的视图替换掉之前的视图。

(1)、select语句中包含子查询 如果视图某列数据是从子查询语句中from后的表的表获得的,则无法修改,其他列就可以修改。 解决办法:将子查询内容先定义成一个视图,然后对该视图再创建视图。 例子:

创建视图语句:create view add_user_view as select u.id as uid,u.name, a.name as add_name from user u,address a where a.id in(select add_id from user where user.id=1);

在此视图中,name列不可修改,因为它是从user中取得的,而user正是后面子查询语句中所查询的表。结果如图:

(2)、SQL语句中包含以下关键字:聚合函数(SUM、MIN、MAX、COUNT等)、DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL。 例子:

(3)、常量视图 例子:

(4)SQL中含JOIN语句的视图(《深入浅出MySQL中》说MySQL5.0不可更新,但是我在MySQL5.5中操作可以更新) MySQL5.5例子:

(5)from一个不可更新的视图 例子:

3、with语句解析

with [cascaded | local] check option决定了是否允许更新数据使记录不再满足视图条件

LOCAL:满足本视图的条件就可以更新 CASCADED(默认):必须满足所有针对该视图的所有视图条件才可以更新。 LOCAL例子:

my_view1要求age>15;my_view2是根据my_view1建立的,约束条件是age<23,当my_view2的age设置为一个<15的数时,修改成功,也就是my_view2的约束不依赖于my_view1。

CASCADED例子:

这里更新时,满足my_view3的条件,不满足my_view1的条件,所以不能更新。

四、删除视图

语句:drop view [if exists] 视图名1[,视图名2...] drop view my_view3

五、查看视图

1、查看数据库中的所有视图(包括表)

show tables;

从MySQL5.1开始,show tables同时显示视图的名字和表的名字,不存在单独显示师徒的show views命令。

2、查看视图状态(包括表)

show table status [from 数据库名] [like 'pattern']

3、查看某个视图的定义

show create view 视图名 show create view my_view1;

转载请注明原文地址: https://www.6miu.com/read-77253.html

最新回复(0)