存储过程和函数类似于Java中的方法。

⒈存储过程

  一组预先编译好的sql语句的集合,理解成批处理语句。

  好处:

    ①提高代码的重用性

    ②简化操作

    ③减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

  1.创建语法 

 create procedure 存储过程名称(参数列表)
begin
存储过程体(一组合法的sql语句)
end

  *参数列表包含了三部分

    ①参数模式  例如:IN

    ②参数名  例如:username

    ③参数类型  例如:varchar(20)

  参数模式:

参数模式 说明
IN 该参数可以作为输入,也就是说该参数需要调用方传入值。
OUT

该参数可以作为输出,也就是说该参数可以作为返回值。

INOUT

该参数既可以作为输入又可以作为输出,也就是该参数既需要

传入值,又可以返回值

  *如果存储过程体仅只有一句话,那么begin end可以省略

  *存储过程中的每条sql语句的结尾必须加分号

  *存储过程的结尾标记可以使用delimiter重新设置。

    语法:delimiter 结束标记

    示例:delimiter $

  2.调用语法。

 call 存储过程名(实参列表);

  3.删除存储过程

 drop procedure 存储过程名;    #一次只能删除一个

  4.查看存储过程的信息

 show create procedure 存储过程名;

  示例:

    ①空参列表

      插入到users表中2条记录

 delimiter $$
create procedure test1()
begin
insert into users(UserName,`PassWord`) values('fanqi','admin'),('gaoxing','admin');
end$$ call test1();

    ②创建带in模式参数的存储过程

      创建存储过程用于判断用户是否登录成功

 delimiter $$
create procedure test2(in username VARCHAR(25),in `password` varchar(25))
begin
declare result int default 0; #声明一个局部变量用于保存是否登录成功
select count(*) into result from users where users.UserName = username and users.`PassWord` = password;
select if(result > 0,'登录成功','登录失败');
end$$ call test2('fanqi','admin');

    ③创建带out模式参数的存储过程

      根据用户名,返回该用户对应的密码

 create procedure test3(in username VARCHAR(25),out `password` varchar(25))
begin
select users.`PassWord` into `password` from users where users.UserName = username limit 1;
end$$ set @password;
call test3('fanqi',@password);
select @password;

    ④创建带inout模式参数的存储过程

      传入a和b两个值,将a和b的值翻倍后返回

 delimiter $$
create procedure test4(inout a int,inout b int)
begin
set a = a * 2;
set b = b * 2;
end$$ set @a = 10, @b = 20;
call test4(@a,@b);
select @a,@b;

⒉函数

  函数和存储过程意义和好处都是一样的。它们的唯一区别就是:

    存储过程可以没有返回值,也可以有多个返回值,适合做批量插入数据、批量更新等。

    函数必须有返回值,而且只能有1个,适合做处理数据后返回1个结果。

  1.创建语法

 create function 函数名(参数列表) returns 返回类型
begin
函数体
end

  *参数列表包含两部分

    ①参数名  例如:username

    ②参数类型  例如:varchar(20)

  *函数体中必须有return语句,如果没有会报错。建议将return语句放在函数体的末尾,当然,没在末尾也不报错。

  *函数体中仅有一句话,则可以省略begin end

  *函数的结尾标记也可以使用delimiter重新设置。

  2.调用语法

 select 函数名(参数列表);

  3.删除函数

 drop function 函数名;

  4.查看函数

 show create function 函数名;

  示例:

    ①没有参数(函数必须有返回值,而且只能有1个

      返回users表的条目数

 set global log_bin_trust_function_creators=TRUE;
delimiter $$
create function test1() returns int
begin
declare num int default 0;
select count(*) into num from users;
return num;
end$$ select test1();

    ②有参数(函数必须有返回值,而且只能有1个

      根据用户名,返回该用户对应的密码

 set global log_bin_trust_function_creators=TRUE;
delimiter $$
create function test2(username varchar(20)) returns varchar(20)
begin
set @password = '';
select users.`PassWord` into @password from users where users.UserName = username;
return @password;
end$$ select test2('fanqi');

MySql存储过程及函数的更多相关文章

  1. MYSQL存储过程和函数学习笔记

    学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...

  2. Paip.断点调试MYSQL存储过程跟函数的解决方案大法

    Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn ...

  3. Mysql存储过程和函数

    Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...

  4. MySql存储过程与函数详解

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...

  5. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  6. MySQL 存储过程和函数

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...

  7. Mysql 存储过程、函数、触发器和视图的权限检查

    当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...

  8. Mysql 存储过程和函数区别

    存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. 存储 ...

  9. MySQL 存储过程和函数(转)

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...

  10. 7 MySQL存储过程和函数

    目录: 1. 存储过程和函数概述2. 准备工作3. 存储过程操作4. 创建带参存储过程5. 查看存储过程 1. 存储过程和函数概述 MySQL的存储过程(stored procedure)和函数(st ...

随机推荐

  1. Linux实战教学笔记49:Zabbix监控平台3.2.4(一)搭建部署与概述

    https://www.cnblogs.com/chensiqiqi/p/9162986.html 一,Zabbix架构 zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企 ...

  2. bsxfun

    By HYB bsxfun(fun,A,B)偶然间发现了这个函数,强大得不得了呀,它的作用是:对两个矩阵A和B之间的每一个元素进行指定的计算(函数fun指定):并且具有自动扩维的作用 例如,A是一个4 ...

  3. TensorRT&Sample&Python[network_api_pytorch_mnist]

    本文是基于TensorRT 5.0.2基础上,关于其内部的network_api_pytorch_mnist例子的分析和介绍. 本例子直接基于pytorch进行训练,然后直接导出权重值为字典,此时并未 ...

  4. SQL SERVER数据库修改是否区分大小写(转载)

    昨天去客户,发现程序无法应用,跟踪错误提示,提示的大致意思是“数据库表名和数据库字段名不存在”.查询后发现是SQL Server数据库设置了区分大小写的缘故(一般安装时,Oracle的正确安装下是默认 ...

  5. Linux下redis的安装及配置

    1.去官网下载redis(redis.io) 2.将其解压到根目录下 3.进入解压的目录,然后编译源程序, 如果不是root账户登录的,命令前面需要加sudo make make install PR ...

  6. 简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)

    原始出处:www.cnblogs.com/Charltsing/p/CellLight.html QQ:564955427 Excel单元格行列指示的实现原理(俗称聚光灯功能) 单元格行列指示功能在录 ...

  7. 使用.net core搭建文件服务器

    标题之所以带上.net core,而不是.net就是由于两者在类库的使用以及部署环境有很大的差别,所以特此说明. 长话短说,直接开始! 1.新建一个.net core项目,版本是2.0,为了方便就建一 ...

  8. Linux C/C++ 链接选项之静态库--whole-archive,--no-whole-archive和--start-group, --end-group

    参照这两篇博客: http://stackoverflow.com/questions/805555/ld-linker-question-the-whole-archive-option http: ...

  9. jmeter学习记录--08--第三方测试组件

    我们安装的JMeter版本,功能仍然有欠缺,插件是一种补充,官方提供了很多插件. 官网地址:http://www.jmeter-plugins.org/, 里面有很多可以安装到JMeter的插件,基本 ...

  10. vue生命週期

    https://www.cnblogs.com/fly_dragon/p/6220273.html https://www.cnblogs.com/fly_dragon/p/6220273.html