-- 存储过程和函数
/*
存储过程和函数:类似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. 依赖注入【转自知乎 PHP】

    第一章:小明和他的手机 从前有个人叫小明 小明有三大爱好,抽烟,喝酒…… 咳咳,不好意思,走错片场了.应该是逛知乎.玩王者农药和抢微信红包 <img src="https://pic1 ...

  2. JSP-Runoob:JSP开发环境搭建

    ylbtech-JSP-Runoob:JSP开发环境搭建 1.返回顶部 1. JSP 开发环境搭建 JSP开发环境是您用来开发.测试和运行JSP程序的地方. 本节将会带您搭建JSP开发环境,具体包括以 ...

  3. LVS集群体系和调度算法

    集群体系和调度算法 LVS集群体系架构 1)使用LVS架设的服务器集群系统有三个部分组成: 最前端的负载均衡层,用Load Balancer表示, 中间的服务器群组层,用Server Array表示, ...

  4. mybatis中各种数据的映射类型

    Mybatis对应的java和数据库的数据类型,最后有图片 Mybatis                                  java                          ...

  5. 流程图软件draw.io

    工作中经常需要梳理一些流程图,时序图.以前用微软Visio绘制流程图(当然不是正版Visio).后来为了响应国家号召,改用processon(proceson.com)进行绘制流程图.Processo ...

  6. echart 参数 vue配置 图文展示

    https://blog.csdn.net/she_lover/article/details/51448967 https://blog.csdn.net/n_meng/article/detail ...

  7. Windows及Linux环境下Tomcat的JVM参数调优

    Windows环境: catalina.bat文件修改 set JAVA_OPTS=-server -Xms4096m -Xmx4096m -XX:PermSize=512m -XX:MaxPermS ...

  8. 网站开发综合技术 第一部分HTML 1.3.2表单

    <form id="" name="" method="post/get" action="负责处理的服务端"&g ...

  9. mysql之命令行导入导出

    命令介绍 mysqldump:导出命令,在系统”命令提示符“窗口直接使用,如果提示没有此命令(前提是已经安装成功mysql),在环境变量中的path添加mysql,即path=D:\xxx\mysql ...

  10. TensorFlow车牌识别实践(1)

    本文对公开的文章进行验证,从环境搭建到运行到结果分析. 1,文章:基于TensorFlow的车牌号识别系统 文章(译文) http://www.cnblogs.com/Jsmile2017/p/680 ...