视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
image.png
image.png

为什么使用视图

image.png

视图事务规则和限制

image.png

使用视图

image.png
利用视图简化复杂的联结
视图的最常见的应用之一是隐藏复杂的SQL,这通常都会涉及联结。 请看下面的例子:
image.png

用视图重新格式化检索出的数据

如上所述,视图的另一常见用途是重新格式化检索出的数据。下面的SELECT语句在单个组合计算列中返回供应商名和位置:
image.png

用视图过滤不想要的数据

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

使用视图与计算字段

视图对于简化计算字段的使用特别有用。它检索某个特定订单中的物品,计算每种物品的总价格:
image.png
为将其转换为一个视图,如下进行:
image.png

更新视图

通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和 DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数 据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。
但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不 能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实 际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:

  • 分组(使用GROUP BY和HAVING); 
  • 联结;
  • 子查询;
  • 并;
  • 聚集函数(Min()、Count()、Sum()等);
  • DISTINCT;
  • 导出(计算)列。

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