视图
视图的行和列来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
创建视图
Create view 视图名字 as ( 单表 or 多表 or 视图)
Create / Replace [algorithm = {undefined | merge | temptable }] view 视图名字 [(column_list)] as ( 单表 or 多表 or 视图) [with [cascaded | local ] check option ]
视图基表有多张时,注意字段名不能重复!
查看视图
Show tables ; -- 可以看到视图
Desc 视图名称; -- 可以看到视图结构(字段)
Show create table 视图名称; -- 可以查看到创建视图语句
Show create view 视图名称; -- 可以查看到创建视图语句
使用视图
当做表进行查询就行了
修改视图
删除视图
Drop view 视图名称;
Drop table 视图名称; -- 不能是table这样删除,否则报错(已测过)
视图的限制
1、 Mysql的视图在from 关键字后面不能包含子查询。
解决方案:可以先将子查询的内容先定义成一个视图,然后对该视图再创建视图就可以实现类似的功能了。
2、 视图的可更新性和视图中查询的定义有关系,有以下类型的视图是不可更新的
①:包含以下关键字的sql语句:聚合函数(sum,min,max,count等等)、distinct、group by、 having、 union 、 或者union all 。
②:常量视图。
例如:create or replace view view_pi as select 3.1415926 as pi ;
③:select 中包含子查询
④:join
⑤:from一个不能更新的视图
⑥:where子句的子查询引用了from子句中的表。
With [cascaded | local ] check option 决定了是否允许更新数据使记录不再满足视图的条件。
Local:只要满足本视图的条件就可以更新;
Cascaded:必须满足所有针对该视图的所有视图的条件才可以更新。
没有指定的话,默认是cascaded 。
1、 Create or replace view payment_view as select payment_id , amount from payment where amount < 10 with check option ;
2、 Create or replace view payment_view2 as select payment_id , amount from payment_view where amount >5 with local check option ;
3、 Create or replace view payment_view3 as select payment_id , amount from payment_view where amount >5 with cascaded check option ;
修改视图:
4、 Update payment_view2 set amount = 10 where payment_id = 3; --修改成功
5、 Update payment_view3 set amount = 10 where payment_id = 3; --修改失败。
Payment_view2 是with local check option 的,所以满足本视图的条件就可以更新。
但是payment_view3 是 with cascaded check option 的,必须满足针对该视图的所有视图才可以更新,因为更新后记录不再满足payment_view 的条件,所以更新操作提示错误退出。
视图的优势
简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
安全: 使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
数据独立: 一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
视图意义
视图数据操作
新增数据
删除数据
1. 多表视图不能删除(一般说的多表是连接多张表)
2. 单表视图可以删除
更改数据
多表视图和单表视图都可以修改数据,
视图本身只有结构,没有数据,但是他能够修改基表的数据。
前提是,他只能修改那些视图中出现的数据,那些基表存在,而视图中没有出现的数据,他根据猜测而想修改的是无效的,不起作用的。因为,他只能修改视图中出现的数据!!
更新限制
视图算法
五子句:order by; group by; having ; where ;limit;