查看: 91|回复: 1

MySQL数据库从入门到精通—视图

[复制链接]

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-12-31 18:42:21 | 显示全部楼层 |阅读模式
视图的概念
视图是一种虚拟表,其内容由查询定义。和真实的表类似,视图包含一系列带有名称的列和行数据。但是,视图在数据库中并不以存储的数据值集形式存在,它的数据来自定义视图查询时所引用的表,并且在引用视图时动态生成。
对视图引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。通过视图进行查询没有任何限制,通过视图进行数据修改时的限制也很少。
视图的定义是基于基本表的,与直接操作基本表相比,视图有以下4个优点。
(1)简化用户操作。视图机制使用户可以将注意力集中在所关心的数据上。如果数据不是直接来自基本表,则可以通过定义视图使数据库看起来结构简单、清晰,而且可以简化用户的数据查询操作。例如定义了若干张表连接的视图,这样就对用户隐藏了表与表之间的连接操作。换句话说,用户只是对一个虚表进行简单查询操作,而无须了解该表的来历。
(2)使用户能以多种角度看待同一数据。视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。
(3)为重构数据库提供了一定程度的逻辑独立性。数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构时(例如增加新的关系或对原有的关系增加新的字段)用户的应用程序不会受影响。
(4)对机密数据提供安全保护。有了视图机制,就可以在设计数据库应用系统时对不同的用户定义不同的视图,普通用户不能看到机密数据,这样视图机制就自动提供了对机密数据的安全保护功能。例如,student表涉及全校15个院系的学生数据,可以在其上定义15个视图,每个视图只包含一个院系的学生数据,并只允许每个院系的管理员查询和修改本院系的学生视图。

视图的操作
详细阐述了视图的基本概念,接下来将讲解视图的操作,包括创建视图、查看视图、修改视图、更新视图和删除视图。
数据准备
在讲解视图之前需要先创建两张数据表(员工表emp和员工详细信息表emp_detail)并插入数据,用于后面的例题演示,其中员工表emp的表结构如表8.1所示。
表8.1 emp表

字段字段类型说明
idint员工编号
namechar(30)员工姓名
sexchar(2)员工性别
ageint员工年龄
departmentchar(10)所在部门
salaryint员工工资
homechar(30)员工户籍
marrychar(2)是否结婚
hobbychar(30)兴趣爱好

在表8.1中列出了员工表的字段、字段类型和说明,然后创建员工表。


在员工表创建完成后向表中插入数据。


以上执行结果证明数据插入完成。然后查看表中数据。


员工详细信息表emp_detail的表结构如表8.2所示。
表8.2 emp_detail表

字段字段类型说明
idint员工编号
poschar(10)员工岗位
experencechar(10)工作经历

在表8.2中列出了员工详细信息表的字段、字段类型和说明。然后创建员工详细信息表。


在员工详细信息表创建完成后向表中插入数据。
mysql> INSERT INTO emp_detail(ID,POS,EXPERENCE) VALUES


以上执行结果证明数据插入完成。然后查看表中数据。


在员工详细信息表创建完成后向表中插入数据。

视图的操作
创建视图
在创建视图时,当前用户必须具有创建视图的权限,同时应该具有查询涉及列的SELECT权限。当前登录的是root用户,查询该用户是否具有创建视图的权限。


以上执行结果可以看出,当前用户具有创建视图的权限,可以进行创建视图的操作。具体语法格式如下所示。


在以上语法格式中,创建视图的语句由多条子句构成。接下来对该语法格式中的每个部分进行详细解析,具体如下。
l CREATE:表示创建视图的关键字。
l OR REPLACE:如果给定了此子句,表示该语句能够替换已有视图。
l ALGORITHM:为可选参数,表示视图选择的算法。
l UNDEFINED:表示MySQL将自动选择使用的算法。
l MERGE:表示将使用视图的语句与视图含义合并起来,使视图定义的某一部分取代语句的对应部分。
l TEMPTABLE:表示将视图的结果存入临时表,然后使用临时表执行语句。
l view_name:表示要创建视图的名称。
l column_list:为可选参数,表示属性清单,指定了视图中各个属性名,在默认情况下,它与SELECT语句中查询的属性相同。
l AS:表示指定视图要执行的操作。
l select_statement:表示从某个表或视图中查出某些满足条件的记录,将这些记录导入视图中。
l WITH CHECK OPTION:为可选参数,表示创建视图时要保证在该视图的权限范围之内。
l CASCADED:为可选参数,表示创建视图时需要满足与该视图有关的所有相关视图和表的条件,该参数为默认值。
l LOCAL:为可选参数,表示创建视图时只要满足该视图本身定义的条件即可。
以上是创建视图的语法格式,视图可以建立在一张表上,也可以建立在多张表上,接下来针对这两种情况分别进行讲解。
1.在单表上创建视图
这里利用准备好的数据,在emp表上创建视图view_emp,包含的列为id、name、sex、age和department。


以上执行结果证明视图创建成功。然后使用SELECT语句查看视图。


从以上执行结果可以看出,视图view_emp与emp表是不同的,该视图只展示了emp表的部分数据,隐藏了另一部分数据,这样便可以对一些数据提供保护。
2.在多表上创建视图
前面讲解了如何在单表上创建视图,用户也可以在多表上创建视图。接下来以两张基本表为例,通过具体案例演示如何在多表上创建视图。
在emp表和emp_detail表上创建视图view_emp_detail,包含的列为id、name、sex、age、department、pos和experence。


以上执行结果证明视图创建成功。然后使用SELECT语句查看视图。


从以上执行结果可以看出,创建基于多表的视图与创建基于单表的视图类似,区别在于还需要进行多张表的连接查询。

查看视图
对于查看视图的操作,要求当前登录的用户具有查看视图的权限。当前登录的是root用户,查询该用户是否具有查看视图的权限。



从以上执行结果可以看出,当前用户具有查看视图的权限,即可以进行查看视图的操作。查看视图有3种方式,接下来对这3种方式分别进行讲解。
1.使用DESCRIBE语句查看视图的字段信息
使用DESCRIBE语句可以查看视图的字段信息,具体语法格式如下。


该语句与查询数据表的字段信息的语句类似,也可以简写为DESC,具体语法格式如下。


使用DESCRIBE语句查看视图view_emp_detail的字段信息。


2.使用SHOW TABLE STATUS语句查看视图的基本信息
使用SHOW TABLE STATUS语句可以查看视图的基本信息,具体语法格式如下。


在以上语法格式中,LIKE关键字后面匹配的是字符串,视图名需要使用单引号括起来。
3.使用SHOW CREATE VIEW语句查看视图的详细信息
使用SHOW CREATE VIEW语句可以查看视图的详细信息,具体语法格式如下。


使用SHOW TABLE STATUS语句查看视图view_emp的基本信息。


从以上执行结果可以看出,view_emp视图的Comment值为VIEW,其他大多数值都是NULL。因为视图并不是具体的数据表,而是一张虚拟表,所以存储引擎、数据长度等信息都显示为NULL。
使用SHOW CREATE VIEW语句查看视图view_emp_detail的详细信息。


从以上执行结果中可以看出,使用SHOW CREATE VIEW语句不仅可以查询到创建视图的定义语句,还可以查询到视图的字符编码。

修改视图
修改视图是指修改数据库中已存在表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。在MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。
1.使用CREATE OR REPLACE VIEW语句修改视图
当使用OR REPLACE字句时,用户必须具有删除视图的权限。此时登录的是root用户,查询该用户是否具有删除视图的权限。


从以上执行结果可看出,当前用户具有删除视图的权限。
使用CREATE OR REPLACE VIEW语句可以修改视图,具体语法格式如下。


在使用以上语法修改视图时,如果修改的视图存在,则会对视图进行修改;如果修改的视图不存在,则会创建一个视图。
2.使用ALTER语句修改视图
ALTER语句也可以修改视图,具体语法格式如下。


使用该语句必须具有创建视图和删除视图的权限,同时应该具有查询涉及列的SELECT权限。
更新视图
因为视图是虚拟表,所以更新视图中的数据时实际上是在更新建立视图的基本表中的数据,例如删除视图中的数据,基本表中的数据也同样被删除,因此用户在更新视图时要小心谨慎。更新视图可以更新、插入和删除对应基本表中的数据,接下来详细讲解3种更新视图的方式。
1.使用UPDATE语句更新视图
UPDATE语句可以更新视图中原有的数据,具体语法格式如下。


在以上语法格式中,“字段名”用于指定要更新的字段名称,“值”用于表示字段更新的新数据,如果需要更新多个字段的值,可以用逗号分隔多个字段和值,“WHERE条件表达式”是可选的,用于指定更新数据需要满足的条件。
使用UPDATE语句将view_emp_detail视图中姓名为赵六的员工的性别修改为女。
首先查看视图view_emp_detail中的数据。


然后修改数据。


以上执行结果证明视图数据修改成功。使用SELECT语句查看视图。


以上执行结果可以看出,姓名为赵六的员工性别被修改为女,说明视图更新成功。
此时还可以查看基本表emp中的数据是否修改。


从以上执行结果可以看出,基本表emp中的数据同样被修改,说明更新视图是直接修改基本表中的数据。

2.使用INSERT语句更新视图
INSERT语句可以用来在视图中插入数据,具体语法格式如下。


在以上语法格式中,值1、值2等是每个字段要添加的数据,每个值的顺序和类型必须与表中字段的顺序和类型都对应。
使用INSERT语句向视图view_emp插入数据,name为周八、age为25。


以上执行结果证明视图数据插入成功。
然后使用SELECT语句查看视图。


从以上执行结果可以看出,在view_emp视图中多出一条数据,实际上这也是直接向基本表中插入了数据。

3.使用DELETE语句更新视图
DELETE语句可以用来删除视图中的数据,具体语法格式如下。


在以上语法格式中,“WHERE条件表达式”是可选的,用于指定删除数据满足的条件。
使用DELETE语句删除视图view_emp中name为周八的数据。


以上执行结果证明视图数据删除成功。
然后使用SELECT语句查看视图。


从以上执行结果可以看出,view_emp视图中name为周八的数据已经被删除,实际上这也是直接删除了基本表中的数据。

删除视图
在删除视图时,当前用户必须具有删除视图的权限,此处不再赘述查看删除视图权限的方法。删除视图的语法格式如下。


在以上语法格式中,视图名是要删除的视图名称,视图名称可以添加多个,各个名称之间用逗号隔开,IF EXISTS(可选参数)用于判断视图是否存在,若存在则删除。
将view_emp_detail视图删除。


以上执行结果证明视图删除成功。然后使用SELECT语句查看视图是否存在。


以上执行结果证明view_emp_detail视图已经不存在,视图删除成功。

小结:MySQL数据库从入门到精通—视图


https://www.zhihu.com/video/1568170309135585280
通过学习,大家应当重视视图的作用,它不仅可以简化用户对数据的理解,还可以帮助用户屏蔽真实表结构变化带来的影响。在实际工作中,用户可以将经常使用的数据定义为视图,这样也可以简化用户的操作。
回复

使用道具 举报

3

主题

14

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2025-4-8 20:17:37 | 显示全部楼层
为了三千积分!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表