MySQL视图,存储过程与存储引擎

  

MySQL视图,存储过程与存储引擎

  

一、前言

  

?前面的文章已经介绍了MySQL的索引与事务以及MySQL的备份与恢复的相关的内容,本文将对MySQL视图及存储过程以及存储引擎进行讲述。

  

二、MySQL视图

  

2.1问题引出——视图的概念

  

?我们在使用SQL语句进行多表查询的时候的命令是非常冗长而麻烦的,如果说这样的操作还非常多的使用的情况下就会加大工作人员的工作量,毕竟不能保证如此长的代码不会写错,并且多次进行如此复杂的查询也会造成服务器资源占用比变大的问题,那么我们有什么好的办法解决这样的问题呢?

  

?其实,我们可以将这些需要经常查询的数据内容(可能存在于多个表中)进行汇总到一个虚拟的表中,既方便了工作人员查询,也减轻了服务器的负担,并且在节约磁盘空间的同时也可以支持数据的动态变化,而这样的表就是“视图”。

  

?其实视图是一种逻辑表,本身并不存放数据。而是作为一个选择语句保存咋数据字典(可以理解为一个容器)中,通过视图,可以展现基表的备份数据,视图数据来自定义视图的查询中使用的表,使用视图动态生成。

  

基表:用来创建视图的表基本表

  

?

  

2.2为什么要使用视图——视图的特点及优缺点

  

视图所占资源较少,就好比是水中月,实际并不存在,但是会根据基表的变化而产生变化。

  

优点:   

?1)简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

  

?2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

  

?3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响,源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

  

?总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

  

缺点:   

?1)性能差:数据库必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也要把它变成一个复杂的结合体,需要花费一定的时间。

  

?2)修改限制:当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

  

2.3简述视图算法

  

?对于视图的算法,简单介绍一下,我们需要在创建视图的时候指定,基本语法:
创建+(算法=可诱惑的/合并/未定义)+视图+视图名+是+选择语句与检查选项;
视图算法,即系统对视图以及外部查询视图的选择语句的一种解析方式。视图算法有三种,分别为:

  
      <李>定义:未定义(默认的),这不是一种实际使用的算法,而是一个“推卸责任”的算法。在未定义的情况下,告诉系统,视图没有定义算法,请自己选择。   <李>可诱惑的:临时表算法,系统先执行视图的选择语句,后执行外部查询语句。   <李>合并:合并算法,系统先将视图对应的选择语句与外部查询视图的选择语句进行合并,然后再执行。此算法比较高效,且在未定义算法的时候,经常会默认选择此算法。   
  

2.4创建视图命令

  

创建一般视图命令格式:

  
 <代码类=" language-shell ">创建视图视图名称选择+内容 
  

三、MySQL存储过程(偏向软件开发方向)

  

3.1何为存储过程?

  

?简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

  

?备注:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

  

3.2存储过程特点

  

?有输入输出参数,可以声明变量,有if/else,情况下,虽然等控制语句,通过编写存储过程,可以实现复杂的逻辑功能,

  

?函数的普遍特性:模块化,封装,代码复用;
?速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

  

四、MySQL存储引擎

  

4.1存储引擎介绍

MySQL视图,存储过程与存储引擎