视图(MySQL)

视图是一种虚拟存在的表,数据是使用视图是动态生成的。

MySQL和其他数据库的视图有啥区别?

  1. 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;
原文地址:https://www.cnblogs.com/wjc920/p/9256142.html