一、存储过程

  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. 奇葩拿shell + 提权wind08r2奇葩拿shell + 提权wind08r2戏

    0x01 小隐拿站篇 某省还是市级还是县级的空防部 先来刺探目录,拿起御剑, 啪啪啪  (鼓掌)后台出来了   试试弱口令 擦  需要管理员验证码,这个咋玩????这个注入都不用找了,就算注射出账号密 ...

  2. c++新标准的一个问题

    显示转换运算符存在多个兼容版本的时候,explicit 关键字无效,编译器默认会选择那个兼容版本进行转换,而不是报错. 测试环境:gcc4.8.1 示例代码: class plebe { privat ...

  3. WSGI、flup、fastcgi、web.py、uwsgi

    ==================        网上别人的理解 =================== http://www.douban.com/note/13508388/ 1.Apache/ ...

  4. 关于一篇对epoll讲的比较好的一篇文章

    原文地址http://www.cnblogs.com/lojunren/p/3856290.html 前言 I/O多路复用有很多种实现.在linux上,2.4内核前主要是select和poll,自Li ...

  5. UVA151 Power Crisis

    嘟嘟嘟 这道题被评为紫题完全是在假(虽然我也跟风评了紫题),顶多黄题难度. 评黄题的主要原因是得知道约瑟夫递推公式,即fn = (fn - 1 +m) % n.表示n个人报数最后的获胜者,需要注意的是 ...

  6. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

  7. Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】

    传送门:http://codeforces.com/contest/1092/problem/D2 D2. Great Vova Wall (Version 2) time limit per tes ...

  8. halcon 分水领域法详解(转载)

    寻思自己写了的,但是这个大佬写的太好了,感谢Y忍冬草_ http://blog.csdn.net/y363703390 https://blog.csdn.net/y363703390/article ...

  9. zabbix时间不同步

    Linux下如何实现与Internet时间同步 一.安装ntp [root@server-2 ~]# yum install -y ntpdate 二.同步时间 // 方式一.使用域名连接,要经过DN ...

  10. springboot项目pom添加依赖

    在dependency 后面  ALt+/  可以打开编辑窗口.