上一篇 MySQL基础(三)—函数、自定义函数

这一篇是对存储过程和存储引擎的笔记,其中操作的数据库在上一篇文章中有代码,可以去看一下。

1、存储过程

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并座位一个单元处理。

1.1、存储过程的作用

说到存储过程的作用,咱们先来说一下写了sql命令之后到拿到返回结果,mysql都经历了哪些。

1、首先输入sql命令之后,mysql引擎会首先对sql命令进行语法分析,来检查sql命令是不是正确

2、如果sql命令是正确的,那么sql命令会通过编译转化成msyql可以识别的命令

3、然后开始执行命令

4、最后将结果返回给客户端

有了上述的这个过程,那咱们如果把检查命令和编译省略掉,就能提升sql命令的效率。那么问题来了,

怎么能省略掉前边的步骤呢?就是是用存储过程!

在一条sql命令第一次被执行的时候,同样会经历上述四个步骤。但是从第二次起,就不用再重新检查和编译了。

1.2、存储过程的优点

1、增强了SQL语句的功能和灵活性。在存储过程中可以用变量以及判断等,就可以使用存储过程完成比较复杂的功能。

2、实现了比较快的执行速度。如果在一个操作包含大量的sql命令,效率较低。频繁调用时在使用存储过程效率较高。

3、减少网络流量。如果要执行一个操作,要写一个完成的sql命令进去。但是如果使用存储过程,那就传递参数就好了,这样提交给服务器的内容就少了很多。

1.3、参数的含义

1、IN,表示该参数的值必须在调用存储过程时指定,这个不能被返回。

2、OUT,表示该参数的值可以被存储过程改变,并且可以返回。

3、INOUT,表示该参数的值在调用时指定,并且可以改变和返回。

1.4、过程体

1、过程体由合法的sql语句构成;

2、过程体可以是任意的SQL语句构成;

3、过程体如果为复合结构则使用 BEGIN...END语句;

4、复合结构可以声明变量,循环,控制流程;

1.5、自定义函数和存储过程的区别

1、存储过程实现的功能更复杂一些;函数针对性更强.很少用函数对表做操作,存储过程经常对表做操作。

2、存储过程可以返回多个值,函数只能返回一个。

3、存储过程一般独立的执行;函数可以座位其他SQL语句的组成部分出现。

1.6使用

1.6.1创建不带参数的存储过程

create PROCEDURE sp1() SELECT VERSION();

#调用存储过程

CALL sp1();

#如果该存储过程没有参数,可以省略后边算是方法名的小括号

CALL sp1;

1.6.2创建IN参数的存储过程

#按id删除球员

#这里有个问题,参数名的不要和数据库里边字段的名称相同

CREATE PROCEDURE deletePlyerById(IN id INT UNSIGNED)

BEGIN

DELETE FROM player where player.playerId=id;

END

select * FROM player

select player.playerId FROM player WHERE player.playerName="我是小米1";

select player.playerId FROM player WHERE player.playerName="我是小米";

#调用存储过程删除两个球员

CALL deletePlyerById(59);

CALL deletePlyerById(60);

1.6.3创建OUT、IN参数的存储过程

#删除球员,并且返回数据库里边还有多少球员

CREATE PROCEDURE detelePlayerByIdReturnPlayerSum(IN id INT UNSIGNED,OUT playerSum INT UNSIGNED)

BEGIN

DELETE FROM player WHERE player.playerId=id;

SELECT COUNT(player.playerId) FROM player INTO playerSum;

END

select player.playerId FROM player WHERE player.playerName="李小米%%";

CALL detelePlayerByIdReturnPlayerSum(57,@playerSum);

SELECT @playerSum

SELECT SUM(player.championNumber) FROM player WHERE player.teamId=2

1.6.4创建多个out类型参数的存储过程

#通过teamid 查询这个球队 有多少个球员,以及这些球员所获得的总冠军总数

CREATE PROCEDURE queryPlayerNumberAndChampionSumByTeamId(IN p_teamId INT ,OUT playerSumForTeam INT UNSIGNED,OUT championSum INT UNSIGNED)

BEGIN

SELECT COUNT(player.playerId) FROM player WHERE player.teamId=p_teamId INTO playerSumForTeam;

SELECT SUM(player.championNumber) FROM player WHERE player.teamId=p_teamId INTO championSum;

END

#调用

CALL queryPlayerNumberAndChampionSumByTeamId(2,@playerSumForTeam,@championSum);

SELECT @playerSumForTeam

SELECT @championSum

1.6.5删除存储过程

DROP PROCEDURE deletePlyerById;

2、MySQL存储引擎

MySQL可以将数据以不同的技术存储在文件中,这种技术被称为存储引擎。每种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

2.1分类

1、MyISAM

2、InnoDB

3、Memory

4、CSV

5、Archive

数据库引擎特性

2.2修改存储引擎的方法

2.2.1、通过修改MySQL配置文件来实现。

-default-storage-engine=engine(存储引擎的名称)

2.2.2、通过创建数据表命令实现

CREATE TABLE test1(

s1 VARCHAR(10))

engine=MyISAM;

CREATE TABLE test2(

s1 VARCHAR(10))

engine=InnoDB;

查询数据表结构

SHOW CREATE table test1;

#结果

#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8

SHOW CREATE table test2;

#结果

#CREATE TABLE `test2` ( `s1` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.2.3、修改数据表的引擎

ALTER TABLE test1 ENGINE=INNODB;

#结果

#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

SHOW CREATE table test1;

#结果

#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8

2.2.4删除表

DROP TABLE test1,test2;

3、结语

MySQL基础先学习到这里,完整的sql文件已经上传到github。

点击查看本节SQL

介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎相关推荐

  1. mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

  2. mysql 时序 存储引擎_MySQL常见的三种存储引擎

    原文链接:https://www.cnblogs.com/yuxiuyan/p/6511837.html 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点 ...

  3. mysql三种引擎_MySQL常见的三种存储引擎

    原文连接:https://www.cnblogs.com/yuxiuyan/p/6511837.htmlhtml 简单来讲,存储引擎就是指表的类型以及表在计算机上的存储方式.数据库 存储引擎的概念是M ...

  4. mysql 查看所有的函数_mysql查看所有存储过程,函数,视图,触发器,表

    查询数据库中的存储过程和函数 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' ...

  5. MySQL存储过程分支语句_mysql 高级语句--存储过程(PROCEDURE)

    mysql 高级语句 一.存储过程 1.什么是存储过程: 就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能. ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的, ...

  6. mysql 存储过程 简书_MySQL学习之存储过程

    一.存储过程 1-1.含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 存储过程和函数:类 ...

  7. mysql自动提交 dcl语句_MySQL基础:DCL语句总结

    SQL语言大致分为DCL.DDL.DML三种,本文主要介绍MySQL 5.7版本DCL语句. 概述 DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可 ...

  8. 怎么用mysql存储系统数据库_mysql数据库之基本操作和存储引擎

    一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...

  9. mysql数据库存储引擎选择_MySQL数据库性能优化之存储引擎选择

    的存储引擎可能是所有关系型产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. Eb$d8lR;Tw0由于各存储引擎功能特性差异较大, ...

最新文章

  1. 3D视觉创新应用(三维重建)竞赛作品系列——多楼层室内环境下的三维几何重建
  2. centos 6.5 安装redis
  3. php 简析对象,PHP白盒审计工具RIPS源码简析
  4. windows打开的winform当前焦点 是否是hwnd_推介几款 windows 下非常好用的工具
  5. python post form data_python实现发送form-data数据的方法详解
  6. Docker 概念很难理解?一文搞定 Docker 端口绑定
  7. 百度SEO工作室团队介绍HTML5源码
  8. idea 非法字符 \ufeff
  9. C#牛人要具备的知识
  10. 快速入门上手第一课 | 从云计算到 Serverless
  11. Quartz 2.x 任务调度使用(CronTrigger)
  12. android控制软键盘显示与隐藏
  13. php libpng 不兼容,Python matplotlib和libpng不兼容issu
  14. 可视化网络监控软件OpManager获选″IT运维产品之星”
  15. 在windows下编译gmplib并使用vs2010成功调用
  16. nodejs+vue+elementui企业考勤管理系统
  17. win7下megui压片无声、卡死、音画不同步、无法转码、无法硬解的解决办法!
  18. 易基因 | 学科前沿:靶向甲基化测序揭示维生素C可防止孕期吸烟引发的后代DNA甲基化改变
  19. 应广单片机开发调试应注意的问题
  20. 性能测试能力提升-JVM GC监控和优化

热门文章

  1. MYSQL的COMMIT和ROLLBACK
  2. 小白学Python——Anaconda安装
  3. 正则表达式与相关工具
  4. 单进程select版-TCP服务器(python 版)
  5. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇
  6. Python中list(列表)
  7. hadoop java配置环境变量_hadoop2.7.2修改配置文件,配置linux java环境变量
  8. chrome控制台如何把vw显示成px_【CSS】679 rem,em,px的区别和使用场景
  9. LeetCode —— 897. 递增顺序查找树(Python)
  10. 神经网络为什么需要激活函数