MySql存储过程及函数
存储过程和函数类似于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存储过程及函数的更多相关文章
- MYSQL存储过程和函数学习笔记
学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...
- Paip.断点调试MYSQL存储过程跟函数的解决方案大法
Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- Mysql存储过程和函数
Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...
- MySql存储过程与函数详解
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- MySQL 存储过程和函数
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
- Mysql 存储过程、函数、触发器和视图的权限检查
当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...
- Mysql 存储过程和函数区别
存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. 存储 ...
- MySQL 存储过程和函数(转)
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
- 7 MySQL存储过程和函数
目录: 1. 存储过程和函数概述2. 准备工作3. 存储过程操作4. 创建带参存储过程5. 查看存储过程 1. 存储过程和函数概述 MySQL的存储过程(stored procedure)和函数(st ...
随机推荐
- 图表插件Highcharts的动态化赋值,实现图表数据的动态化设置显示
在很早之前就介绍过图表插件Highcharts的使用了,在2014年的随笔<基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts>,这里基本上都介绍 ...
- 使用React全家桶搭建一个后台管理系统
引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术 ...
- H5 百度一下,你就知道
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jquery动态设置图片路径和超链接href属性
js document.getElementById("myImage").src="hackanm.gif"; jquery $("#img&quo ...
- (hdu 6024) Building Shops
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024 Problem Description HDU’s n classrooms are on a ...
- Linux(Ubuntu)使用日记(四)------印象笔记相关使用
在Ubuntu系统下没有印象笔记官方的客户端,但是这并不能阻拦我们使用印象笔记. 我们一般的的使用习惯: 印象笔记客户端 印象笔记剪藏 Linux下也可以使用两个工具,剪藏的话安装比较简单,印象笔记客 ...
- Python——设计模式——单例模式
一个类始终只有一个实例 当你第一次实例化这个类的时候,就创建一个实例化得对象 当你之后再来实例化的时候,就用之前创建的对象 class A: __instance = False def __ini_ ...
- Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查
今天测试反应了一个问题,说接口返回的速度变慢了,并且返回的数据也不对.然后就找到了我o(╥﹏╥)o. 第一个反应就是查日志,不查不要紧,一查吓一跳,整个服务器上所有的站点都报错了.异常信息如下: Sy ...
- shell脚本自动化部署服务
shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...
- 社交系统ThinkSNS+安装部署演示
ThinkSNS(简称TS),一款全平台综合性社交软件系统,10年来为国内外大中小企业和创业者提供社交化软件研发及技术解决方案.目前有ThinkSNS V4.ThinkSNS+两个并行系统. Thin ...