• MySQL入门第三天(下)——存储过程与存储引擎


    一、存储过程

      1.简介

      原始的SQL执行的流程:

      

      通过存储过程,便可以简化以上流程,那么存储过程是什么,如何进行性能提高呢?

      是什么?

      

         存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

       性能提高原理:

        只在第一次的时候编译分析,以后客户端调用只需要调用编译后的结果

      优点:

      

      2.语法分析

      存储过程语法分析:

      

      参数分析:

      

      过程体分析:

      

      注意点:

         和函数一样,需要使用 DELIMITER更改 分隔符

        若过程有多个SQL组成,需要用 BEGIN ... END(类似于Java中if后的{},单独一句时可以省略,但建议不要省略

        每次定义完存储过程,请更改回分隔符

      3.存储过程调用与删除

      

       

      4.创建无参存储过程

        

      5.创建有参存储过程

        一般而言都不会有过于简单的存储过程与函数在实际中,所以创建时请指定DELIMITER并使用BEGIN ...END(即使它只有一条SQL)

        带有IN类型参数

        要操作的数据表:

        

        创建存储过程:

        

        调用存储过程:

        

         神奇的发现居然传了一个 1 ,把所有id都删除掉了,原因是MySQL认为两个id是指 id = id,本身 = 本身的条件,而无法区分哪个是入参

        所以,定义入参时,请考虑这样的冲突问题:

        但是存储过程和函数类似,无法实时编辑修改,想要修改,只能删除,重建

        

        重建存储过程:(请先使用DELIMITER)

         

         带有IN和OUT类型参数

        请注意初始创建时修改分隔符,创建完成需要修改回

        

        这里出现了一点新面孔,我们来简单介绍一下MySQL中的变量:

        通过变量来实现Mysql增加行号:https://blog.csdn.net/gao763024185/article/details/79638052

        

    mysql变量的术语分类:

    1.用户变量:以"@"开始,形式为"@变量名"
    用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
    2.全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名
    对所有客户端生效。只有具有super权限才可以设置全局变量
    3.会话变量:只对连接的客户端有效。
    4.局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量
    declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量

       如何设值用户变量(只对当前用户客户端有效):——一般而言,用户变量以@开头

      语法:SET 变量名 = 变量值 [,变量名= 变量值 ...]

        实例:(所以上文的INTO也可以改用用户变量进行存储管理)

      

        带有多个OUT类型参数

      给出需求:

        根据用户名删除用户,返回被删除的用户和剩余的用户

      操作的表如下:

      

        操作之前介绍一个先导知识:ROW_COUNT()函数,表示的是被影响的行(增删改的行)

       实例:

      

        创建存储过程:再次提醒,若创建错误存储过程,请删除后翻阅命令重新创建

      

        调用前信息:

      

        调用结果:

      

       6.存储过程的注释

         1.使用 --,如--判断是否签约

        2.C注释风格

      一般而言,存储过程可以单独使用,而函数针对性较强,多用在SQL语句中作为组成部分

      更多详细存储过程介绍(如流程控制等),参见http://www.cnblogs.com/mark-chan/p/5384139.html

    二、存储引擎

      1.简介

        我们可以通过之前接触过的命令:SHOW CREATE TABLE tb_name来查看数据库创建语句,从而得知存储引擎:

      

      概述:(也可以称之为表类型)

      

       MySQL支持的引擎:(前两种见的比较多)

        

      2.各种存储引擎

        先导知识:

      

        并发控制,就可以理解为我们常见的锁

        锁的分类:

      

        锁的颗粒:

      

      为什么说表锁开销最小呢?

        因为表锁只需要一把锁,而行锁需要每条记录加锁,所以说开销大。

        事务处理:更多的事务介绍不在此处展开

      

        外键和索引:也暂不在这里展开

      

      

        各大引擎都是基于上述的不同方式:

      

       常见引擎选择:(当然,引擎是可以扩展的,像阿里的数据库也叫MySQL,但除了名字都叫MySQL外,内在是天壤之别)

      

      3.设值存储引擎

        修改配置文件:

      当前使用的MySQL5.5中找到安装目录下的配置文件:my.ini:

      

        建表时手动指定:

      

        实例:

      

        建表后修改表引擎

      

        实例:

      

  • 相关阅读:
    还有更简单的不重复随机数生成方法吗?
    SqlServer数据插入性能小记
    html页面滚动时元素错位解决方案
    为Web页中的Table对象创建一个映射表
    js实现的快速排序
    webkit内核的浏览器为什么removeAttribute('style')会失效?
    setAttribute第三个参数
    Windows转到linux中,文件乱码,文件编码转换
    查看端口的占用
    sndfile
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7398853.html
Copyright © 2020-2023  润新知