Rumah > pangkalan data > tutorial mysql > MySQL视图的作用详解(二)-过滤数据、计算字段、更新视图

MySQL视图的作用详解(二)-过滤数据、计算字段、更新视图

巴扎黑
Lepaskan: 2017-05-17 16:40:12
asal
3328 orang telah melayarinya

用视图过滤不想要的数据

视图对于应用普通的 WHERE 子句也很有用。例如,可以定义customeremaillist 视图,它过滤没有电子邮件地址的客户。为此目的,可使用下面的语句:

输入:

create view customeremaillist as select cust_id,cust_name,cust_email from customers where cust_email is not null;
Salin selepas log masuk

分析:显然,在发送电子邮件到邮件列表时,需要排除没有电子邮件地址的用户。这里的 WHERE 子句过滤了 cust_email 列中具有NULL 值的那些行,使他们不被检索出来。

现在,可以像使用其他表一样使用视图 customeremaillist 。

输入:

select * fromcustomeremaillist;
Salin selepas log masuk

输出:

4.png

WHERE 子句与 WHERE 子句 如果从视图检索数据时使用了一条WHERE 子句,则两组子句(一组在视图中,另一组是传递给视图的)将自动组合。

使用视图与计算字段

视图对于简化计算字段的使用特别有用。下面是第10章中介绍的一条 SELECT 语句。它检索某个特定订单中的物品,计算每种物品的总价格:

输入:

select prod_id,quantity,item_price,quantity*item_price as expanded_price from orderitems where order_num = 20005;
Salin selepas log masuk

输出:

5.png

为将其转换为一个视图,如下进行:

输入:

create view orderitemsexpanded as select prod_id,quantity,item_price,quantity*item_price as expanded_price from orderitems;
Salin selepas log masuk

为检索订单 20005 的详细内容(上面的输出),如下进行:

输入:

select * from orderitemsexpanded where order_num = 20005;
Salin selepas log masuk

输出:

6.png

可以看到,视图非常容易创建,而且很好使用。正确使用,视图可极大地简化复杂的数据处理。


更新视图

迄今为止的所有视图都是和 SELECT 语句使用的。然而,视图的数据能否更新?答案视情况而定。

通常,视图是可更新的(即,可以对它们使用 INSERT 、 UPDATE 和DELETE )。更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。

但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:

1.分组(使用 GROUP BY 和 HAVING );

2.联结;

3.子查询;

4.并;

5.聚集函数( Min() 、 Count() 、 Sum() 等);

6.DISTINCT;

7.导出(计算)列。

换句话说,本章许多例子中的视图都是不可更新的。这听上去好像是一个严重的限制,但实际上不是,因为视图主要用于数据检索。

可能的变动 上面列出的限制自MySQL 5以来是正确的。不过,未来的MySQL很可能会取消某些限制。

将视图用于检索 一般,应该将视图用于检索( SELECT 语句)而不用于更新( INSERT 、 UPDATE 和 DELETE )。


总结:

视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的 SELECT 语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。

Atas ialah kandungan terperinci MySQL视图的作用详解(二)-过滤数据、计算字段、更新视图. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan