
视图的作用
离散数学及其应用-汉堡包的单词
2023年3月20日发(作者:购并)mysql视图计算_MySQL视图的作⽤详解(⼆)-过滤数据、计
算字段、更新视图
⽤视图过滤不想要的数据
视图对于应⽤普通的WHERE⼦句也很有⽤。例如,可以定义customeremaillist视图,它过滤没有电⼦邮件地址的客户。为此⽬的,可
使⽤下⾯的语句:
输⼊:createviewcustomeremaillistasselectcust_id,cust_name,cust_emailfromcustomerswherecust_emailisnotnull;
分析:显然,在发送电⼦邮件到邮件列表时,需要排除没有电⼦邮件地址的⽤户。这⾥的WHERE⼦句过滤了cust_email列中具有NULL
值的那些⾏,使他们不被检索出来。
现在,可以像使⽤其他表⼀样使⽤视图customeremaillist。
输⼊:select*fromcustomeremaillist;
输出:
WHERE⼦句与WHERE⼦句如果从视图检索数据时使⽤了⼀条WHERE⼦句,则两组⼦句(⼀组在视图中,另⼀组是传递给视图的)将⾃
动组合。
使⽤视图与计算字段
视图对于简化计算字段的使⽤特别有⽤。下⾯是第10章中介绍的⼀条SELECT语句。它检索某个特定订单中的物品,计算每种物品的总价
格:
输⼊:selectprod_id,quantity,item_price,quantity*item_priceasexpanded_pricefromorderitemswhereorder_num=20005;
输出:
为将其转换为⼀个视图,如下进⾏:
输⼊:createvieworderitemsexpandedasselectprod_id,quantity,item_price,quantity*item_priceasexpanded_pricefrom
orderitems;
为检索订单20005的详细内容(上⾯的输出),如下进⾏:
输⼊:select*fromorderitemsexpandedwhereorder_num=20005;
输出:
可以看到,视图⾮常容易创建,⽽且很好使⽤。正确使⽤,视图可极⼤地简化复杂的数据处理。
更新视图
迄今为⽌的所有视图都是和SELECT语句使⽤的。然⽽,视图的数据能否更新?答案视情况⽽定。
通常,视图是可更新的(即,可以对它们使⽤INSERT、UPDATE和DELETE)。更新⼀个视图将更新其基表(可以回忆⼀下,视图本⾝没
有数据)。如果你对视图增加或删除⾏,实际上是对其基表增加或删除⾏。
但是,并⾮所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插⼊和删除)。这实
际上意味着,如果视图定义中有以下操作,则不能进⾏视图的更新:
1.分组(使⽤GROUPBY和HAVING);
2.联结;
3.⼦查询;
4.并;
5.聚集函数(Min()、Count()、Sum()等);
CT;
7.导出(计算)列。
换句话说,本章许多例⼦中的视图都是不可更新的。这听上去好像是⼀个严重的限制,但实际上不是,因为视图主要⽤于数据检索。
可能的变动上⾯列出的限制⾃MySQL5以来是正确的。不过,未来的MySQL很可能会取消某些限制。
将视图⽤于检索⼀般,应该将视图⽤于检索(SELECT语句)⽽不⽤于更新(INSERT、UPDATE和DELETE)。
总结:
视图为虚拟的表。它们包含的不是数据⽽是根据需要检索数据的查询。视图提供了⼀种MySQL的SELECT语句层次的封装,可⽤来简化数
据处理以及重新格式化基础数据或保护基础数据。