-- 存储过程和函数
/*
存储过程和函数:类似java中的方法 好处:
1.提高代码的重用性
2.简化操作
*/ /*
存储过程 含义:一组预先编译好的SQL语句的集合。理解成批处理语句 1.提高代码的重用性
2.简化操作
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
*/ -- 创建存储过程
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL)
END /*
注意:
1.参数列表包含三部分:参数模式 参数名 参数类型
例如:IN stuName varchar(20); 参数模式:
IN :该参数可以作为输入,需要调用方传入值
OUT :改参数可以作为输出,该参数作为返回值
INOUT :该参数既可以输入也可以输出,该参数既需要传入值,又可以返回值 2.如果存储过程提只有一句话,begin end 可以省略 3.存储过程体中每条SQL语句的结尾必须加分号 4.存储过程的结尾可以使用 DELIMITER 重新设置
例如 DELIMITER 任意字符
*/ -- 调用存储过程
CALL 存储过程名(实参列表); -- ----------------------案例-----------------------------------------
-- 1.空参列表
-- 插入到amdin表中五条记录
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,`password`) VALUES
('a',''),
('b',''),
('c',''),
('d',''),
('e','');
END $
-- 调用
CALL myp1()$ -- 2.创建代in模式参数的存储过程
-- 案例1.创建存储过程,根据女神名查询对应的男生信息
DELIMITER $
CREATE PROCEDURE myp2(IN beautyName VARCHAR(50))
BEGIN
SELECT bo.* FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id WHERE be.name = beautyName;
END $
-- 调用
CALL myp2('麦克雷')$ -- 如果出现字符集问题,可以set names gbk$ -- 案例2 创建存储过程,实现用户是否登录成功
DELIMITER $
CREATE PROCEDURE myp3(IN username VARCHAR(10),IN PASSWORD VARCHAR(10))
BEGIN
DECLARE result INT DEFAULT 0; -- 声明局部变量并初始化 SELECT COUNT(*) INTO result FROM admin WHERE admin.`username`=username AND admin.`password`=PASSWORD; SELECT IF(result>0,'成功','失败');
END $
-- 调用
CALL myp3('john','')$ -- 3.创建代 in / out的存储过程
-- 案例1 根据女神名,返回对应的男神名
DELIMITER $
CREATE PROCEDURE myp4(IN NAME VARCHAR(50),OUT boyName VARCHAR(20))
BEGIN
SELECT bo.boyName INTO boyName
FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id
WHERE be.name = NAME;
END $
-- 调用
CALL myp4('麦克雷',@bName)$
SELECT @bName $ -- 案例2.根据女神名,返回对应的男神名和男神魅力值
DELIMITER $
CREATE PROCEDURE myp5(IN NAME VARCHAR(50),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
SELECT bo.boyName,bo.userCP INTO boyName,userCP
FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id
WHERE be.name = NAME;
END $
-- 调用
CALL myp5('麦克雷',@boyName,@userCP)$
SELECT @boyName,@userCP $ -- 4.创建代 inout 模式参数的存储过程
-- 案例1.传入a和b两个值,最终a,b都翻倍并返回
DELIMITER $
CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)
BEGIN
SET a = a*2;
SET b = b*2;
END $
-- 定义用户变量
SET @m = 10$
SET @n = 20$
-- 调用
CALL myp6(@m,@n)$
-- 查询值
SELECT @m,@n$

练习

-- 练习
-- 1.创建存储过程 实现 传入用户名密码,插入到admin中
DELIMITER $
CREATE PROCEDURE myep1(IN username VARCHAR(10),IN PASSWORD VARCHAR(20))
BEGIN
INSERT INTO admin(username,`password`) VALUES(username,PASSWORD);
END $
CALL myep1('士兵76','')$ -- 2.创建存储过程 实现传入女神编号,返回女神名称和女神电话
DELIMITER $
CREATE PROCEDURE myep2(IN id INT,OUT NAME VARCHAR(50),OUT phone VARCHAR(11))
BEGIN
SELECT be.name,be.phone INTO NAME,phone FROM beauty be WHERE be.id = id;
END $
CALL myep2(1,@name,@phone)$
SELECT @name,@phone$ -- 3.创建存储过程 实现传入两个女神生日,返回大小
DELIMITER $
CREATE PROCEDURE myep3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT)
BEGIN
SELECT DATEDIFF(birth1,birth2) INTO result ;
END $
CALL myep3('1992-3-6',NOW(),@result)$
SELECT @result$

存储过程的删除和查看

-- 删除存储过程,每次只能删除一个
-- drop procedure 存储过程名
DROP PROCEDURE myp1; -- 查看存储过程
SHOW CREATE PROCEDURE myep1;

<MySQL>入门七 存储过程和函数的更多相关文章

  1. MySQL中的存储过程和函数使用详解

    一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...

  2. MySQL基础值 存储过程和函数

    一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE  PROCE ...

  3. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  4. MySQL教程之存储过程与函数

    存储程序分为存储过程和函数 可以使用CALL来调用存储过程,只能输出变量返回值.存储过程可以调用其他存储过程 函数可以从语句外调用,也能返回标量值 什么是存储过程? 简单的说,就是一组SQL语句集,功 ...

  5. MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别

    1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...

  6. MySQL中的存储过程、函数与触发器

    一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...

  7. Mysql变量、存储过程、函数、流程控制

    一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...

  8. MySql视图、存储过程、函数、索引

    一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...

  9. 八、mysql视图、存储过程、函数以及时间调度器

    .create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...

随机推荐

  1. APDU报文【转】

    本文转载自:http://www.cnbolgs.com/snail0404/p/5436348.html APDU   # APDU # 定义:APDU(ApplicationProtocolDat ...

  2. leetcode 690. Employee Importance——本质上就是tree的DFS和BFS

    You are given a data structure of employee information, which includes the employee's unique id, his ...

  3. URAL1553 Caves and Tunnels 树链剖分 动态树

    URAL1553 维护一棵树,随时修改某个节点的权值,询问(x,y)路径上权值最大的点. 树是静态的,不过套动态树也能过,时限卡的严就得上树链剖分了. 还是那句话 splay的核心是splay(x) ...

  4. 洛谷 P2822 [ NOIP 2017 ] 组合数问题 —— 数学

    题目:https://www.luogu.org/problemnew/show/P2822 阶乘太大,算不了: 但 k 只有 8 个质因子嘛,暴力60分: #include<iostream& ...

  5. 17.EXTJs 中icon 与iconCls的区别及用法!

    转自:https://blog.csdn.net/u013890437/article/details/38315717?utm_source=blogxgwz7

  6. table样式测试总结tr td宽度分析

    题外话:一直以来习惯布局用ul,li样式调整比较方便,不会互相影响出现一些问题,but~现在公司涉及很多表格打印,都是用table写的,好多宽度高度合并啊,组合啊~~~,单元格之间互相影响,有的样式设 ...

  7. P3564 [POI2014]BAR-Salad Bar

    传送门 我是来帮加藤大佬写题解的--全世界都没找到加藤大佬写法的说明--很难受-- 首先我们把\(p\)看成\(1\),\(j\)看成\(-1\),一个区间满足条件就意味着这个区间的所有前缀和都大于等 ...

  8. 04-Vue中的动画

    Vue中的动画 为什么要有动画:动画能够提高用户的体验,帮助用户更好的理解页面中的功能: -使用过渡类名 1.html <div id="app"> <input ...

  9. *RelativeLayout的布局参数含义表,如android:layout_alignParentTop等

    RelativeLayout 参数规则 一个控件的位置由横,纵两个方向上的距离决定 控件默认的位置在左上角. 单独使用以下属性都只是改变一个方向的相对位置. 如:只使用了android:layout_ ...

  10. 编写UI自动化测试用例原则

    1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器.2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统3.尽量只做功能中正向逻辑的验证,不要考虑 ...