视图

视图的行和列来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。




mysql修改视图字段的备注 mysql给视图加注释_mysql with as


创建视图


mysql修改视图字段的备注 mysql给视图加注释_表视图_02


Create view 视图名字 as ( 单表 or 多表 or 视图)

Create / Replace [algorithm = {undefined | merge | temptable }] view 视图名字 [(column_list)] as ( 单表 or 多表 or 视图) [with [cascaded | local ] check option ]

视图基表有多张时,注意字段名不能重复!

查看视图


mysql修改视图字段的备注 mysql给视图加注释_表视图_03


Show tables ; -- 可以看到视图

Desc 视图名称; -- 可以看到视图结构(字段)

Show create table 视图名称; -- 可以查看到创建视图语句


mysql修改视图字段的备注 mysql给视图加注释_表视图_04


Show create view 视图名称; -- 可以查看到创建视图语句

使用视图

当做表进行查询就行了

修改视图


mysql修改视图字段的备注 mysql给视图加注释_表视图_05


删除视图

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 的条件,所以更新操作提示错误退出。

视图的优势

简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

安全: 使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

数据独立: 一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

视图意义


mysql修改视图字段的备注 mysql给视图加注释_mysql修改视图字段的备注_06


视图数据操作


mysql修改视图字段的备注 mysql给视图加注释_子查询_07


新增数据


mysql修改视图字段的备注 mysql给视图加注释_数据_08


mysql修改视图字段的备注 mysql给视图加注释_mysql修改视图字段的备注_09


删除数据

1. 多表视图不能删除(一般说的多表是连接多张表)

2. 单表视图可以删除

更改数据

多表视图和单表视图都可以修改数据,

视图本身只有结构,没有数据,但是他能够修改基表的数据。

前提是,他只能修改那些视图中出现的数据,那些基表存在,而视图中没有出现的数据,他根据猜测而想修改的是无效的,不起作用的。因为,他只能修改视图中出现的数据!!

更新限制


mysql修改视图字段的备注 mysql给视图加注释_子查询_10


mysql修改视图字段的备注 mysql给视图加注释_mysql with as_11


视图算法


mysql修改视图字段的备注 mysql给视图加注释_数据_12


mysql修改视图字段的备注 mysql给视图加注释_mysql修改视图字段的备注_13


mysql修改视图字段的备注 mysql给视图加注释_表视图_14


五子句:order by; group by; having ; where ;limit;


mysql修改视图字段的备注 mysql给视图加注释_mysql with as_15