-- 存储过程和函数
/*
存储过程和函数:类似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. how to modify vs2017

    https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio 直接用everything搜索vs_install ...

  2. [Codeforces Round511C] Enlarge GCD

    [题目链接] https://codeforces.com/contest/1047/problem/C [算法] 首先求出n个数的最大公约数g , 将每个数除以g , 那么 , 问题就转化为在n个数 ...

  3. Could not find modernizr-2.6.2 in any of the sources GitLab: API is not accessible

    Could not find modernizr-2.6.2 in any of the sources GitLab: API is not accessible bundle exec rake ...

  4. 使用inet_ntoa() 时编译提示错误:

    char*inet_ntoa(struct in_addr in)将一个IP转换成一个互联网标准点分格式的字符串. 我把 inet_ntoa 需要的头文件加上去:    #include <sy ...

  5. MySQL 备份和恢复数据

    备份指定数据库的全部表或指定表 mysqldump -u user -h localhost -p [password] db_name[ tbl_name[,tbl_name.......]]> ...

  6. Commons-FileUpload 常用API

    ServerFileUpload类的常用方法 方法名称 方法描述 public void setSizeMax(long sizeMax) 设置请求信息实体内容的最大允许的字节数 public Lis ...

  7. [App Store Connect帮助]五、管理构建版本(2)查看构建版本和文件大小

    您可以查看您为某个 App 上传的所有构建版本,和由 App Store 创建的变体版本的大小.一些构建版本在该 App 发布到 App Store 上后可能不会显示. 必要职能:“帐户持有人”职能. ...

  8. [SDOI2010]外星千足虫(高斯消元)

    高斯消元裸题... 方法一:暴力,O(2^n)20分 方法二:直接Gauss,加点玄学技巧搞得好的话70分 方法三:使用bitset优化,复杂度:$O(\frac{n^3}{ω})$ 不会的同学看一下 ...

  9. ACM_求补集的交集

    求补集的交集 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个集合,然后再给出两个该集合的子集,求他们对应补集的交集. I ...

  10. C# 访问mongodb数据库

    1.引用四个mongodb动态库MongoDB.Bson.dll,MongoDB.Driver.Core.dll,MongoDB.Driver.dll,MongoDB.Driver.Legacy.dl ...