视图那些事儿----基于Mysql



武汉加油!!!

引入

在上一篇文章中, 我们重点介绍了在mysql中怎么使用索引来提高查询的效率, 感兴趣的同学可以移步索引那些事儿----基于Mysql, 本篇文章主要说明视图的作用有哪些, 以及如何使用

视图

视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作, 同真实表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

一个例子现有一张学生表, 存放学生信息. 还有一张成绩表, 存放学生成绩, 有个业务需要查询每个学生的名称以及成绩, 那每次查询我们都需要两种表关联起来进行查询, 显得不太友好

视图的出现, 在学生表和成绩表的基础上, 创建一个视图(学生成绩表), 该表只保留学生名称和成绩. 这样我们使用的时候直接使用视图即可.

视图的优点

  • 简单: 简化操作, 简化查询
  • 安全: 视图中只保存业务需要的字段, 不会涉及其他字段

注意视图通常是在多张表上创建的, 但是也能够为一张表创建视图

创建

CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名[(属性清单)]
AS SELECT语句
[WITH [CASCADED|LOCAL] CHECK OPTION];

其中:

  • ALGORITHM:可选项,表示视图选择的算法。
  • 视图名:表示要创建的视图名称。
  • 属性清单:可选项,指定视图中各个属性的名词,默认情况下与SELECT语句中的查询的属性相同。
  • SELECT:表示一个完整的查询语句,将查询记录导入视图中。
  • WITH CHECK OPTION:可选项,表示更新视图时要保证在该视图的权限范围之内。

示例:

create view 
	stu_glass (id ,name ,glass) 
	as 
	select student.s_id,student.name,stu_info.glass
   		from student,stu_info 
   			where student.s_id=stu_info.s_id;

说明:

  • 在创建视图前, 需要先确定一下当前用户是否具有create view的权限, 如果创建的时候包含 or replace, 当前用户还需要删除视图drop view的权限.
  • select语句模块中, 不能包含from子句中子查询, 不能引用系统和用户变量, 不能使用预处理参数
  • 视图中创建中设计的表必须已经存在, 并且定义中不能引用和创建temporary.
  • 视图不可以和触发器程序关联在一起
  • 视图定义中允许使用order by,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句.它将不生效

IF和CASE语句

我们上边看到了简单的创建视图, 但是有些时候我们在创建视图的时候需要的基础表中的数据做一些修改

一个例子还是上面的学生成绩视图例子

学生表

学号 姓名 性别 入学年份
01 张三 1 2014
01 李四 2 2015

可以看到, 在学生表中 1 代表男, 2代表女, 我们在创建视图的时候需要做一下转化, 1 的转化为男, 2014为大一

CREATE OR REPLACE VIEW student_view
AS
	SELECT
	,name
	,IF(sex=1,'男','女') AS sex_name
	,CASE grade
		WHEN '2014' THEN '大一'
		WHEN '2015' THEN '大二'
		WHEN '2016' THEN '大三'
		ELSE '大四'
	END AS grade_name
	FROM student;

这样便实现了在创建视图的时候使用IF和CASE语句对字段做转换.

查看

使用describe语句查看视图基本信息又称为视图结构

 describe view_name; //describe 可以缩写为desc

修改

修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。MySQL中通过CREATE OR REPLACE VIEW语句和ALTER VIEW语句来修改视图。

  • 使用 create or replace view语句如果视图不存在则创建, 如果存在这修改(相当于重建视图)
create [or replace] [algorithm = {undefined | merge | temptable}]
      view view_name [(column_list)]
      as select statement
      [with [cascaded | local] check option]
  • 使用alter语句修改视图
alter [algorithm = {undefined | merge | temptable}]
      view view_name [(column_list)]
      as select statement
      [wwith [cascaded | local] check option]

其中一些参数和创建的时候一样:

  • ALGORITHM:可选项,表示视图选择的算法。
  • 视图名:表示要创建的视图名称。
  • 属性清单:可选项,指定视图中各个属性的名词,默认情况下与SELECT语句中的查询的属性相同。
  • SELECT:表示一个完整的查询语句,将查询记录导入视图中。
  • WITH CHECK OPTION:可选项,表示更新视图时要保证在该视图的权限范围之内。

删除

删除视图是指删除数据库中已存在的视图。

DROP VIEW IF EXISTS stu_glass; 

对数据的操作

上面我们说的都是针对视图自身的创建, 更新, 删除等操作, 那关于视图涉及到的数据怎么操作呢, 因为视图中的数据都在被创建视图的基本表上, 所以操作数据的时候, 其实去操作基本表中的数据.

虽然说的时候看书复杂, 其实用的时候就就把视图当做一张表就可以了,

  • 插入数据
insert into view_name(age) values(20);
  • 更新数据
update view_name set age=21;
  • 删除数据
delete from view_name where age=21;

总结

本文中, 介绍了视图的概念和使用, 以及如何对数据进行操作.

发布了106 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_32060101/article/details/104198382