目录
一、视图的简介
1.1 什么是视图?
1.2 为什么使用视图?
1.3 视图有哪些规则与限制?
1.4 视图能否更新?
二、视图的创建
三、视图的作用
3.1 用视图简化复杂的联结
3.2 用视图格式化检索出的数据
3.3 用视图过滤数据
一、视图的简介
*本节涉及概念来源于图灵程序设计丛书,数据库系列——《MySQL必知必会》
1.1 什么是视图?
视图为虚拟的表,并不包含数据。视图只包含使用时动态检索数据的查询,返回的数据是从其他表中检索出来的。
在视图创建之后,可以用与表基本相同的方式使用它。可以对视图执行查询、过滤和排序等操作,也可以进行联结到其他视图或表。
1.2 为什么使用视图?
视图提供了一种查询语句层次的封装,可以用来简化数据处理、格式化基础数据或保护基础数据。视图的常见应用有:
①重用SQL语句,简化复杂的SQL操作。
②更改数据格式和表示。
③过滤不需要的数据。
④保护数据,可以给用户授予表的特定部分的访问权限,而不是整个表的访问权限。
1.3 视图有哪些规则与限制?
①视图必须唯一命名,不可与别的视图或表重名。
②可创建的视图数目没有限制,视图可嵌套,即从其他视图中检索数据的查询来构造一个视图。
③视图的中可以使用ORDER BY ,但如果使用该视图的查询语句中也含有ORDER BY,则视图中的会被覆盖;如果同时使用的是WHERE子句,则会两组子句自动组合。
④视图不能索引,也不能有关联的触发器或默认值。
⑤创建视图必须有足够的访问权限。
1.4 视图能否更新?
视图本身不包含数据,返回的数据是从其他表中检索出来的,当更改这些表中的数据时,视图将返回更改后的数据。(视图不包含数据,每次使用视图时都会处理查询执行时所需的任一个检索)
视图是可更新的,但上述有提到视图中的数据来源于其他表,那么对视图进行更新,实际上是对其基表进行更新。
视图更新有很多限制,视图的主要作用是用于数据检索,而不是更新数据。
二、视图的创建
①创建 CREATE VIEW name AS ...
②查看 SHOW CREATE VIEW name
③删除 DROP VIEW name
④更新 可以先用DROP再用CREATE;或者直接用CREATE OR REPLACE VIEW,如果要更新的视图不存在则会创建一个视图,否则会替换原视图。
三、视图的作用
3.1 用视图简化复杂的联结
以表格customers与orders为例。
视图可以简化SQL语句的使用,利用视图可以一次性编写基础的SQL,然后根据需要多次使用。
myview视图中返回将c表与o表联结起来并进行对应查询所得用户姓名、id以及订单号。
如要检索订单号为20009的客户的名字以及id,可以直接从myview视图中进行检索。在处理此查询时会将WHERE子句与视图中原有的WHERE子句结合起来正确检索数据。
3.2 用视图格式化检索出的数据
以表格vendors为例。
如果想要输出 vend_name(vend_country) 的格式,并经常使用该格式,可以创建一个视图。
3.3 用视图过滤数据
在customers表格中,有些用户没有email信息,如果要过滤掉cust_email为null的行,可以创建一个视图,后续可以直接使用该视图进行其他检索。
*只要不主动删除,视图是一直存在于对应的数据库中的。