“从 SQL 的角度来看视图就是一张表”
视图和表到底有什么不同呢?区别只有一个,那就是“是否保存了实际的数据”
通常,我们在创建表时,会通过 INSERT 语句将数据保存到数据库之中,而数据库中的数据实际上会被保存到计算机的存储设备(通常是硬盘)中。因此,我们通过 SELECT 语句查询数据时,实际上就是从存储设备(硬盘)中读取数据,进行各种计算之后,再将结果返回给用户这样一个过程。
但是使用视图时并不会将数据保存到存储设备之中,而且也不会将数据保存到其他任何地方。实际上视图保存的是 SELECT 语句。我们从视图中读取数据时,视图会在内部执行该 SELECT 语句并创建出一张临时表。
视图的优点
- 由于视图无需保存数据,因此可以节省存储设备的容量
- 可以将频繁使用的 SELECT 语句保存成视图,这样就不用每次都重新书写了
视图中的数据会随着原表的变化自动更新。视图归根到底就是SELECT 语句,所谓“参照视图”也就是“执行 SELECT 语句”的意思,因此可以保证数据的最新状态。这也是将数据保存在表中所不具备的优势。
创建视图的方法:注意不要少了AS!
CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)
AS
<SELECT语句>
视图的限制
- 定义视图时不能使用ORDER BY子句
- 对视图进行更新
为什么不能使用 ORDER BY 子句呢?这是因为视图和表一样,数据行都是没有顺序的。实际上,有些 DBMS 在定义视图的语句中是可以使用 ORDER BY 子句的A,但是这并不是通用的语法。因此,在定义视图时请不要使用 ORDER BY 子句。
如果定义视图的 SELECT 语句出现某些条件,那么这个视图就不能被更新。
- ① SELECT 子句中使用 DISTINCT
- ② FROM 子句中有多张表
- ③ 使用了 GROUP BY 子句
- ④ 使用了 HAVING 子句
删除视图
- DROP VIEW 视图名称(<视图列名1>, <视图列名2>, ……)