mysql 视图
简介视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。
通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。
基表:用来创建视图的表叫做基表base table
视图的诸多优点,如下
1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率
1.创建视图
create view view_test as select * from test; create or replace view view_test as select * from test where id=1; --替换已有视图
2.查看视图
select * from information_schema.views; 查看视图信息 show create view view_test; 查看视图信息 desc view_test; select * from view_name; 查询视图数据
3.视图的更改
update view_test set name='tom1' where id=1; --test表数据也更改了 视图的DML操作,不是所有的视图都可以做DML操作。 有下列内容之一,视图不能做DML操作: (1).select子句中包含distinct (2).select子句中包含组函数 (3).select语句中包含group by子句 (4).select语句中包含order by子句 (5).select语句中包含union 、union all等集合运算符 (6).where子句中包含相关子查询 (7).from子句中包含多个表 (8).如果视图中有计算列,则不能更新 (9).如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作
4.删除视图
drop view if exists view_test;
5.使用with check option约束
--对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。 create view view_test as select * from test where id in (1,2,3) with check option; update view_test set name='tom1' where id=5; --update操作不生效