为什么要有视图?
先看我们先到遇到的情况。
视图是从一个或多个表(或视图)查询出的数据形成的虚拟表。如果我们有一个复杂的查询,就可以把这个查询做成视图。视图保存的是SQL
语句,不保存查询结果。他里面的数据来源是什么?
举例:
- 临时性:相当于临时组成的工作小组。
- 重复利用
视图与我们之前学的表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图一经定义,就可以像表一样被查询、修改、删除和更新。
应用场景:
- 多个地方用到同样的查询结果。
- 该查询语句比较复杂,如果每个人都自己写查询语句,不统一。、
视图的创建
语法:
CREATE [OR REPLACE] VIEW 视图名称[(column [ ,...n ] )]
AS 查询语句
[WITH CHECK OPTION]
例:
建立视图,视图内容为学生的姓名。
CREATE VIEW s1 AS
SELECT
StuName
FROM
student;
视图的优点
SQL
语句的重用- 为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。
- 屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。
- 简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。
视图的操作
视图的修改
语法1:
CREATE OR REPLACE VIEW 视图名
AS
查询语句;
例:
把视图s1的内容修改为学生姓名与电话号码。
CREATE OR REPLACE VIEW s1 AS
SELECT
StuName,Telephone
FROM
student;
语法2:
ALTER VIEW 视图名
AS
查询语句;
例:
把视图s1的内容修改为学生姓名,性别与电话号码。
ALTER VIEW s1 AS
SELECT
StuName,Telephone,StuSex
FROM
student;
删除视图
语法:
drop view 视图名,视图名,视图名...;
例:
DROP VIEW s1;
查看视图
语法1:
desc 视图名;
例:
查看视图s1的结构
DESC s1;
语法2:
show create view 视图名;
例:
查看视图s1的结构
show create view s1;
不可更新视图
视图也是可以进行增删改查的,更改的同时,也会修改原数据表,增删改查的方式和数据表一样(因为它也是一张表),但是有以下几种情况,是不允许进行增删改查的~
在创建视图时,如果对应的查询语句包含下述结构中的任何一种,那么它就是不可更新的:
聚合函数;
2.DISTINCT
关键字;GROUP BY
子句;ORDER BY
子句;HAVING
子句;UNION
运算符;- 位于选择列表中的子查询;
FROM
子句中包含多个表;SELECT
语句中引用了不可更新视图;WHERE
子句中的子查询,引用FROM
子句中的表;
11.ALGORITHM
选项指定为TEMPTABLE
(使用临时表总会使视图成为不可更新的)。
保证数据操作的一致性
当对包含where
子句的视图执行修改或插入操作时,即使新数据不满足 where
条件,操作也能成功。使用 with check option
选项,限制通过视图对基表中数据的操作。
参考笔记来自老师授课的教案:番茄发烧了
编程我也是初学者,难免有理解错误的地方,希望大家看完之后,发现错误可以评论出来,谢谢大家