一、存储过程

  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:

  

    建表时手动指定:

  

    实例:

  

    建表后修改表引擎

  

    实例:

  

MySQL入门第三天(下)——存储过程与存储引擎的更多相关文章

  1. MySQL入门第三天(上)——函数与视图

    一.MySQL函数 同样的,完整的函数可以参照开源中国的手册:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh 1.字符函数 CONCAT ...

  2. jQuery入门第三

    jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...

  3. [MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]

    [MySQL数据库之表的详细操作:存储引擎.表介绍.表字段之数据类型] 表的详细操作 存储引擎 mysql中建立的库======>文件夹 库中建立的表======>文件 用来存储数据的文件 ...

  4. MySQL中MyISAM和InnoDB两种主流存储引擎的特点

    一.数据库引擎(Engines)的概念 MySQ5.6L的架构图: MySQL的存储引擎全称为(Pluggable Storage Engines)插件式存储引擎.MySQL的所有逻辑概念,包括SQL ...

  5. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  6. MySQL开发篇(4)表类型(存储引擎)的选择

    一.查看支持的存储引擎以及设置修改存储引擎 1.查看默认存储引擎:show variables like '%storage_engine%'; 2.查看当前数据库支持的存储引擎:show ENGIN ...

  7. MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表

    Messages表: mysql>create table Messages( ->message_id int auto_increment primary key, ->user ...

  8. Oracle入门第三天(下)——子查询

    一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...

  9. java入门第三步之数据库连接

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

随机推荐

  1. July 05th 2017 Week 27th Wednesday

    No man can make a good coat with bad cloth. 巧妇难为无米之炊. One can't make bricks without straw. There is ...

  2. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式

    SAP Cloud for Customer的Sales工作中心里有Sales Quote和Sales Order两个视图,一个用于销售报价单,另一个用于销售订单. 流程上是先有报价单 ,报价单是一份 ...

  3. 转 C++11之std::function和std::bind

    std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...

  4. Webpack笔记(三)——一款破产版脚手架的开发

    前些天一直在学习入门Webpack,后来尝试了自己搭建一下一个简单的React开发环境,后来就在想可不可以自己写一个简单的脚手架,以免每次搭建一个简单的开发环境都需要自己一个个的配置,这样很麻烦,使用 ...

  5. 闲来无事,用javascript写了一个简单的轨迹动画

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. BZOJ1923:[SDOI2010]外星千足虫(高斯消元)

    Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...

  7. SSH 与 SSL

    关于 ssh 有人已经总结得非常好了,这里推荐大家看下 阮一峰 写的 ssh原理与应用 写得简单易懂,非常赞. 关于 ssl  这里有一篇博文写得也不错,ssl协议详解 好了,那 ssh 和 ssl ...

  8. Redis配置文件(3)常见的配置修改

    常见的配置: redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程   daemonize no   2. 当Redis以 ...

  9. c#用链表来存储并读取写好的配置文件

    别用arraylist,效果没有list好(因为要装箱拆箱,所以会影响性能) 使用list,那我们就来先声明一个List 1) 声明 List<元素类型> myList = new Lis ...

  10. 【转】spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...