zoukankan      html  css  js  c++  java
  • mysql 视图、存储过程

    一、视图

    什么是视图

    视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。
    通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。
    基表:用来创建视图的表叫做基表base table

    为什么要使用视图

    因为视图的诸多优点,如下
      1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
      2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
      3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
    总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

    视图算法

    对于视图的算法,我们需要在创建视图的时候指定,基本语法:
    create + [algorithm = temptable/merge/undefined] + view + 视图名 + as + select语句 with check option;
    视图算法,即系统对视图以及外部查询视图的select语句的一种解析方式。视图算法有三种,分别为:

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

    with check option

    可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。

    二、存储过程

    什么是存储过程

    简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;
    ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

    特点

    有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
    函数的普遍特性:模块化,封装,代码复用;
    速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

    示例

    存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;
    几点说明:
    DELIMITER //:把默认的输入的结束符;替换成//。
    DEFINER:创建者;

    DROP procedure if EXISTS `lmh_test`;
    DELIMITER //
    CREATE PROCEDURE `lmh_test`(IN a VARCHAR(64),IN y INT) 
    BEGIN
    	SELECT a1.id as '编号',b1.baseid as '唯一标识符',b1.title as '标题',b1.issn as 'issn',b1.`year` as `year` FROM cnki_journal_base a1,cnki_journal_yearinfo b1 WHERE a1.baseid=a AND b1.baseid = a AND b1.`year`=y GROUP BY b1.baseid;
    END
    //
    DELIMITER ;
    

    调用过程

    call lmh_test('GWDZ',2018);
    
  • 相关阅读:
    kubernetes进阶(一) kubectl工具使用详解
    二进制安装kubernetes(七) 部署知识点总结
    1024程序员节:这就是国内开发者的现状?
    php 伪协议
    浅谈 PHP 与手机 APP 开发(API 接口开发)
    比RBAC更好的权限认证方式(Auth类认证)
    PHP获得毫秒数
    2020年PHP面试题附答案(实战经验)
    分享几套2019年各大公司最新的PHP面试题,几斤几两一试便知
    PHP面试题2019年百度工程师面试题及答案解析
  • 原文地址:https://www.cnblogs.com/testlmh/p/10297643.html
Copyright © 2011-2022 走看看