mysql高级-视图详细总结

视图定义:是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影。
同一张表可以创建多个视图。

创建视图的语法:
create view viewName as select语句

查询视图:和表一样,可以添加where条件。
修改视图:alter view viewName as select * from…
删除视图:drop view viewName.
查看视图结构:和表一样 desc viewName.
查看所有视图:show tables;注意没有show views语句。
也可以试试这个语法:show full tables where table_type like ‘VIEW’;

视图的作用:
1、简化查询

例如:查询价格前3高的商品。
传统sql实现:
select catId,avg(shopPrice) pj from goods group by catId order by pj limit 3;
视图实现:查询语句变简单了。
create view viewName  as select catId,avg(shopPrice) pj from goods group by catId;
select * from viewName order by pj limit 3;

例如:查询商品表,以及对应的类别
传统sql实现:
select goodName,b.catName from a left join b  on a.catId=b.catId;
视图实现:
create view viewName as select goodName,b.catName from a left join b  on a.catId=b.catId;
select * from view viewName;

2、权限控制

例如只让一个人可以查询一张表的指定字段。
第一步:创建视图,视图中不包含限制的字段。
create view  viewName as select id,name from a;
第二步:创建一个用户,授予查询权限,只能操作viewName视图。
grant select on php.viewName to 'xiaoMing'@'%' identified by '1234456';

视图和表的关系
1、视图的数据和表的数据一一对应的时,可以修改。
2、修改表,视图也自动改变。修改视图,表也自动改变。
修改视图:和修改表一样,update 视图 set …=… where …=…;
3、视图增删改也会影响表,但是视图并不是总能增删改的。
举例:一个视图是由一张表统计得到的,有一列平均值,这种情况是不能修改视图中的平均值这一列的,会报错。
4、对于视图insert还应注意,视图必须包含表中没有默认值的列。
相当于直接对原表进行操作,由于原表中该字段是不能为null的,还没有默认值,所以是不能插入的。

注意:
视图一般只用来查询,不应该执行增删改操作。

视图算法
在这里插入图片描述
学习链接:
1、https://www.cnblogs.com/chuanzhang053/p/9230153.html
可以根据视图创建视图
2、https://blog.csdn.net/wuqianjing/article/details/81358740
比较详细的一个链接
一、通过视图插入数据,一次只能给一张基础表插入,不能一次一条sql语句给多张基础表插入,否则会报错3.2。(要想给多张基础表插入需要分开写多条sql语句,修改删除数据同理)
二、在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。那么更新数据时不能插入或更新不符合视图限制条件的记录。不加“WITH CHECK OPTION”命令,通过视图修改,可能导致数据无故消失。在文章末尾。
3、https://blog.csdn.net/HXNLYW/article/details/81669964
写了创建视图的几点好处
一、 表做了拆分,不需要修改程序
4、https://www.jianshu.com/p/27b4fee28ff6
更新视图的操作不能使用在计算出来的或者统计的列上
5、https://jingyan.baidu.com/article/4f34706e7dbfb6e387b56d0f.html
当视图包含以下内容时,视图更新操作将不能执行
1.视图中不包含及表中定义非空的列;
2.在定义视图的SELECT语句后的字段列表使用了数学表达式
3.在定义视图的SELECT语句后的字段列表使用了聚合函数
4.在定义视图的SELECT语句后的字段列表使用了DISTINCT,UNION,TOP,GROUP BY 或HAVING子句

综上,对视图进行增删改非常麻烦,个人不建议使用视图直接进行更新,建议直接对基表进行操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值