mysql 视图

什么是视图?

视图是由查询结果形成的一张虚拟表

什么时候要用到视图?

如果某个查询结构出现的非常频繁,也就是,要经常拿这个查询结果来做子查询的时候

使用视图的好处

1)简化查询语句(比如工人的平均共资)
2)可以进行权限控制
把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列。
3)大数据表分表的时候,可以将表分成n个视图

视图与表的关系

视图是表的查询结构,自然表的数据变了,会影响视图的结果

能否对视图进行增删改查的操作

1)视图的增删改也会影响表
2)但是图并不总是能 增删改的

创建视图

例:

create view v_salaries
as
select employess.emp_no,first_name,last_name,ifnull(avg(salary),0) from employees left join salaries on employess.emp_no = salaries.emp_no group by employess.emp_no;

视图的存放位置

视图存放在infomation_schema数据库下的views表里
并且视图存在两种执行算法

1,merge:合并的执行方式,每当执行的时候,先将我们视图的sql语句与外部查询视图的sql语句,混合在一起,最终执行
2,temptable :临时表模式,每当查询的时候,将试图所使用的select语句生成一个结果的临时表,再在当前的临时表内进行查询

指的是一个视图是在什么时候执行,依据哪些方式执行

对于merge,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

对于temptable,视图的结果将被置于临时表中,然后使用他执行语句。

对于undefined ,mysql将选择所需要的算法,如果可能,亚倾向于merge而不是temptable 这是因为merge通常更有效,而且如果使用了临时表,视图是不可更新的

视图的管理

查看视图的定义
show table status from view_table_name;
删除视图
是能删除视图的定义,不能删除数据,必须要有drop的权限
drop view if exists view_name
查看权限
select drop_priv from mysql.user where user =‘root’;
删除视图
drop view if exists worder_view1;

某些视图是可更新的,也就是说可以再注入update,delete或insert中使用他们,以更新基表的内容,对于可更新的视图在视图中的行和基表中的行之间必须具有一对一的关系,还有一一些特定的其他结构,这类结构会是的视图不可更新,更具体的将,如果视图包涵下书结构中的任何一种,那么他就是不可更新的。
1,聚合函数(sum,min等)
2,distinct
3,having
4,froup by
5,union或union al’
6,位于选择列表中的子查询
7,join
8,from子句中的不可更新视图
9,where子句中子查询,引用from子句中的表
10,仅引用文字值(在该情况下,没有要更新的基本表)
11,algorithm = temptable (使用临时表总会是视图成为不可更新的)
4,关于with check option可以这么解释,通过视图进行的修改,必须也能通过该视图看到修改的后的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值