【MySQL进阶学习】视图

为什么要有视图?

先看我们先到遇到的情况。
视图是从一个或多个表(或视图)查询出的数据形成的虚拟表。如果我们有一个复杂的查询,就可以把这个查询做成视图。视图保存的是SQL语句,不保存查询结果。他里面的数据来源是什么?

举例:

  • 临时性:相当于临时组成的工作小组。
  • 重复利用

视图与我们之前学的表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图一经定义,就可以像表一样被查询、修改、删除和更新。

应用场景:

  1. 多个地方用到同样的查询结果。
  2. 该查询语句比较复杂,如果每个人都自己写查询语句,不统一。、

视图的创建

语法:

CREATE [OR REPLACE] VIEW 视图名称[(column [ ,...n ] )]
AS 查询语句
[WITH CHECK OPTION]

例:
建立视图,视图内容为学生的姓名。

CREATE VIEW s1 AS
SELECT 
	StuName 
FROM 
	student;

视图的优点

  1. SQL语句的重用
  2. 为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。
  3. 屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。
  4. 简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。

视图的操作


视图的修改

语法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;

不可更新视图

视图也是可以进行增删改查的,更改的同时,也会修改原数据表,增删改查的方式和数据表一样(因为它也是一张表),但是有以下几种情况,是不允许进行增删改查的~

在创建视图时,如果对应的查询语句包含下述结构中的任何一种,那么它就是不可更新的:

  1. 聚合函数;
    2.DISTINCT关键字;
  2. GROUP BY子句;
  3. ORDER BY 子句;
  4. HAVING子句;
  5. UNION运算符;
  6. 位于选择列表中的子查询;
  7. FROM子句中包含多个表;
  8. SELECT语句中引用了不可更新视图;
  9. WHERE子句中的子查询,引用 FROM子句中的表;
    11.ALGORITHM选项指定为 TEMPTABLE(使用临时表总会使视图成为不可更新的)。

保证数据操作的一致性

当对包含where子句的视图执行修改或插入操作时,即使新数据不满足 where 条件,操作也能成功。使用 with check option选项,限制通过视图对基表中数据的操作。


参考笔记来自老师授课的教案:番茄发烧了

编程我也是初学者,难免有理解错误的地方,希望大家看完之后,发现错误可以评论出来,谢谢大家

发布了22 篇原创文章 · 获赞 259 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lolly1023/article/details/105498394