视图是一种虚拟存在的表,数据是使用视图是动态生成的。
MySQL和其他数据库的视图有啥区别?
- MySQL中from后面不能包含子查询
和普通表对比:
- 简单:使用视图的用户不用关心背后表的结构、关联条件和筛选条件,只关心视图结果集;
- 安全:只能访问视图结果集数据,一般对表的权限管理中不能针对某行某列做权限控制,通过视图筛选出具体行和列,就可以简单实现具体的行和列访问权限控制;
- 数据独立:视图结构一旦确定就可以屏蔽表结构变化对用户的影响。表增加列队视图没有影响,表修改列名只需修改视图对应列名即可(如果要保持列名不变,加个别名即可)。
以下类型视图不能更新:
- 包含聚合函数(sum、min、max、count等)、distinct、group by、having、union或者union all
- 常量视图,如:creat or replace view pi as select 3.1415926 as pi
- select中包含子查询
- jion
- from 一个不能更新的视图
- where后面子查询引用了from子句中的表
注:也就是说视图中的行能和表中的行一一对应时才能执行更新操作。当然,更新(插入)也不是随意的,更新(插入)之后数据必须还在视图中
视图操作
视图创建:
create or replace view payment_view as
select payment_id,amount from payment
where amount<10 with check option;
视图查看:
show tables; - 没有单独的视图查询语句
视图数据更新:
update payment_view set amount=10 where payment_id=4;
注;执行报错:[Err] 1369 - CHECK OPTION failed ‘offer100.payment_view’,因为amount=10不满足视图查询条件
视图数据插入:
insert into payment_view(payment_id,amount) values (9,6.6)
注:如果将6.6换成11就会执行失败
视图数据删除:
delete from payment_view2 where payment_id=1111;
视图删除
drop view payment_view;