mysql中的视图

来源:互联网 发布:手机控制网络的软件 编辑:程序博客网 时间:2024/05/16 09:17
mysql中的视图
1.索引的优势:
虚拟存在的表,行和列的数据来自定义视图的查询中使用的表;
  1. 简单:不需要关心表结构,关联条件,筛选条件;已经是过滤好的结果集;
  2. 安全:对表的权限管理并不能限制到某个行某个列,通过视图可以;
  3. 数据独立:视图结构定了,可以屏蔽表结构的变化,增加列对视图没有影响,修改列名,可以修改视图解决,不影响访问者;
2.创建或者修改视图[create or replace 或者 alter]
create [or replace] [ algorithm={undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
-------------------------------------------------------
create or replace view view_nameas
select_statement;
-----------------------------------------------------
from关键字后面不能包含子查询;
视图是否可以更新和视图中查询定义有关:
1.包含聚合函数sum,HAVING等;
2.常量视图;
3.select中包含子查询;
4.jion
5.from 一个不能更新的视图;
6.where 子句的子查询引用了from子句中的表;
例子:
--包含聚合函数:
create or replaceviewpayment_sumas
selectstaff_id ,sum(account) from paymentgroup by staff_id;
--常量视图:
create or replaceviewpias
select3.1415926as pi;
--select中包含子查询
create or replaceviewcity_viewas
select(select city from city where city_id=1 );
-----------------------------------------------------------------
[with [cascaded | local] check option] 决定是否允许更新视图使得记录不在满足视图的条件;
local :满足本视图就可以更新;
cascaded:默认的,必须满足针对该视图的所有视图的条件;
例子:
create or replaceviewpayment_viewas
selectpayment_id ,amout frompayment
where amount < 10with check option; //默认cascaded

create or replaceviewpayment_view1as
selectpayment_id ,amout frompayment_view
where amount > 5withlocalcheck option; //local

create or replaceviewpayment_view2as
selectpayment_id ,amout frompayment_view
where amount > 5withcascadedcheck option; //cascaded
-------------------------------------------------------
select * from payment_view1 limit l;

updatepayment_view1set amount=10
where payment_id =3; //正确

updatepayment_view2set amount=10
where payment_id =3; //报错,payment_view2 是cascaded,必须满足payment_view才可以。等于10,不小于10.
删除视图:
drop view [if exists] view_name;
查看视图:
show tables; //显示表和显示有哪些视图
show table status like 'staff_list'; //查看视图信息
show create view staff_list; //查看某个视图的定义








0 0
原创粉丝点击