目录
一、视图概述
1、简化查询语句
2、安全性
3、逻辑数据独立性
二、视图管理
1、创建视图
(1)基于单表创建视图
(2)基于多表创建视图
2、查看视图
(1)查看视图的字段信息
(2)查看视图的状态信息
(3)查看视图的创建语句
3、修改视图
(1)使用CREATE OR REPLACE VIEW 语句修改视图
(2)使用ALTER 语句修改视图
4、删除视图
三、视图数据操作
1、添加数据
2、修改数据
3、删除数据
学习MySQL的视图概述、视图管理(创建、查看、修改、删除)、视图数据操作(添加、修改、删除、)
视图不仅可以简化用户对数据的理解,也可以简化对数据的操作。例如,日常开发需要经常使用一个比较复杂的语句进行查询,此时就可以将该查询语句定义为视图,从而避免大量重复且复杂的操作。
数据库授权命令可以将每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定列上。通过视图,可以更加方便地进行权限控制,使特定用户只能查询和修改指定的数据,而无法查看和修改数据库中的其他数据。
视图可以帮助用户屏蔽数据表结构变化带来的影响,例如,数据表增加字段不会影
响基于该数据表查询出数据的视图。
在MySQL中,可以使用CREATE VIEW 语句创建视图。
创建视图的基本语法格式
CREATE [ OR REPLACE ] VIEW 视图名 [(字段列表)] AS select_statement ;
视图的基本表可以是一张数据表,也可以是多张数据表。
例如,公司想要组建一个开发小组,开发一个资源管理系统,供各部门上传共享资源。该系统需要根据员工工号empno、员工姓名ename、职位job和部门编号deptno进行账户管理和权限授、予。如果将操作员工表的权限直接交给该开发小组,会造成部分敏感信息泄露。此时数据库管理员可以将员工工号empno、员工姓名ename、职位job和部门编号deptno查询出来创建视view_emp,供该开发小组使用。
示例:将员工工号empno、员工姓名ename、职位job和部门编号deptno查询出来创建视view_emp
通过SELECT 语句查看view_emp视图
从执行结果可以看出,创建的视图view_emp的字段名称和数据表emp的字段名称是一样的。
视图的字段名称可以使用基本表的字段名称,但也可以根据实际的需求自定义视图字段的名称。例如,数据库管理员觉得将数据表的真实字段名称在视图中暴露不太安全,想要创建一个新的视图view_emp2给开发小组使用。视图view_emp2中包含的字段和视图view_emp相同,但视图view_emp2中的字段名称和员工表中的字段名称不一致。
示例:视图view_emp2中包含的字段和视图view_emp相同,但视图view_emp2中的字段名称和员工表中的字段名称不一致
通过SELECT 语句查看view_emp2视图
从执行结果可以看出,虽然view_emp和view_emp2两个视图中的字段名称不同,但是数据却是相同的,这是因为这两个视图引用的是同一个数据表中的数据。在实际开发中,用户可以根据自己的需要,通过视图获取基本表中需要的数据,这样既能满足用户的需求,也不需要破坏基本表原来的结构,从而保证了基本表中数据的安全性。
在MySQL中,除了可以在单表上创建视图,还可以在两个或两个以上的数据表上创建视图。
例如,经过会议研讨,开发小组开发资源管理系统时,需要使用公司ems数据库中员工编号empno、员工姓名ename、职位job、部门编号 deptno和部门名称dname的信息。
示例:创建视图view_emp_dept
通过SELECT 语句查看view_emp_dept视图
在上述执行结果中,视图view_emp_dept 中的字段名称和数据表emp及数据表dept中的字段名不一致,但是字段值和数据表中的数据是一致的。
在MySQL中,使用DESCRIBE 语句可以查看视图的字段名、字段类型等字段信息。
DESCRIBE 语句的基本语法格式
DESCRIBE 视图名 ;
或者简写为
DESC 视图名 ;
示例:查看视图view_emp_dept 的字段信息
上述执行结果显示出视图view_emp_dept的字段信息,其中部分字段信息代表的意思具体如下。
在MySQL中,可以使用SHOW TABLE STATUS 语句查看视图和数据表的状态信息。
SHOW TABLE STATUS 语句的基本语法格式
SHOW TABLE STATUS LIKE '视图名' ;
在上述格式中,LIKE表示后面匹配的是字符串,‘ 视图名 ’表示要查看的视图的名称,视图名称需要使用单引号包裹起来。
示例:使用SHOW TABLE STATUS语句查看视图view_emp_dept的信息
上述执行结果中显示了视图view_emp_dept的信息,其最后一行的Comment项表示备注说明。它的值为VIEW ,说明我们所查询的view_emp_dept是一个视图。
示例:使用SHOW TABLE STATUS语句查看数据表dept的信息
上述执行结果显示了数据表dept的信息,包括存储引擎、创建时间等,但是Comment项没有信息,说明所查询的不是视图,这是查询视图信息和数据表信息的最直接区别。
在MySQL中,使用 SHOW CREATE VIEW 语句可以查看创建视图时的定义语句。
SHOW CREATE VIEW 语句的基本语法格式
SHOW CREATE VIEW 视图名 ;
在上述格式中,视图名指是要查看的视图的名称。
示例:使用 SHOW CREATE VIEW 语句查看视图 view_emp_dept 的信息
上述执行结果可以查看出,使用 SHOW CREATE VIEW 语句查询到了视图的名称、创建语句、字符编码等信息。
视图的修改指的是修改数据库中存在的视图的定义,当视图的基本表中的字段发生变化时,需要对视图进行修改以保证查询的正确性。例如,view_emp视图的基本表emp中的员工姓名字段修改了名称,此时再使用视图就会出错。
基本语法格式
CREATE OR REPLACE VIEW 视图名 AS SELECT 语句
使用CREATE OR REPLACE VIEW语句修改视图时,要求被修改的视图在数据库中已经存在,如果视图不存在,那么将创建一个新视图。
示例:开发小组需要在视图view_emp_dept原有的基础上新增员工上级工号的字段,以便对上级赋予更多权限。开发小组的申请得到批准后,数据库管理员对视图view_emp_dept进行修改。
示例:在原有的基础上新增一个员工表的mgr字段
使用DESC 语句查看修改后的视图表
从上述执行结果可以看出,视图view_emp_dept包含6个字段,新增了字段e_mgr ,表明视图修改成功。此时使用SELECT 语句查询视图 view_emp中的数据
从上述结果可以看出,通过视图view_emp_dept查询到的数据中新增了数据表emp中字段mgr的数据。
ALTER 语句MySQL提供的另一种修改视图的方法,
使用该语句修改视图的基本语法格式
ALTER VIEW < 视图名 > AS
例如,数据库管理员认为开发小组只是需要部门名称,没必要将部门的编号返回到视图view emp dept中,想将视图view_emp_dept中的部门编号字段进行删除。
示例:使用ALTER语句修改视图view_emp_dept
通过SELECT 语句查看view_emp_dept视图
当视图不再使用时,可以将其删除。删除视图时,只会删除所创建的视图,不会删除基本表中的数据。删除一个或多个视图可以使用DROP VIEW语句,
其基本语法格式
DROP VIEW view_name [, view_name1, ...] ;
在上述语法格式中,view_name是要删除的视图的名称,视图名称可以添加多个,多个视图之间使用逗号隔开。删除视图必须拥有DROP权限。
示例:视图view_emp不再被需要,数据库管理员想要删除它,此时就可以使用DROPVIEW语句实现
通过SELECT 语句查看视图是否被删除
上述执行结果可以看出,执行结果显示,即ems数据库中不存在视图view_emp。
通过视图向基本表添加数据可以使用INSERT语句。
例如,开发小组想要通过视图在部门表中添加一个部门信息。由于此时数据库中还没有部门表对应的视图,因此需要数据库管理员先创建部门表dept对应的视图,通过视图可以查询部门表dept中的所有数据。
示例:开发小组想要通过视图在部门表中添加一个部门信息
先创建部门表dept对应的视图
查看部门表dept中现有的数据
添加一个部门数据信息,通过SELECT 语句查看
上述结果可以看出,数据表dept中添加了一行新数据,说明通过视图成功向基本表添加了数据。
通过视图修改基本表的数据可以使用UPDATE语句。
示例:使用UPDATE语句通过视图对部门名称进行修改
通过SELECT 语句查看
上述执行结果可以看出,部门表dept的部门名称中没有研究院,只要研究中心,说明通过视图成功修改了基本表的数据。
通过视图删除基本表的数据可以使用 DELETE 语句。
示例:通过视图view_dept删除部门表dept中部门名称为人力资源部的记录
通过SELECT 语句查看
从上述结果可以看出,部门表dept中部门名称为人力资源部的记录不存在。