-- 存储过程和函数
/*
存储过程和函数:类似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. SoapUI中的RegEx

    在for Content matching RegEx中

  2. cassandra的全文检索插件

    https://github.com/Stratio/cassandra-lucene-index Stratio’s Cassandra Lucene Index Stratio’s Cassand ...

  3. Zookeeper日志文件&事务日志&数据快照

    Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...

  4. IntelliJ IDEA Tomcat配置

    解决方法: 下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native

  5. hdu1213 并查集不压缩

    题意:题意:一个人请人吃饭,相互认识的朋友在一张桌子,相互认识的朋友的意思是如果A认识B,B认识C,那么A.B.C是朋友,对于每组输入输出桌子的张数. Sample Input 2 5 3 1 2 2 ...

  6. NestedPreb

    屌丝手动版 One of the things we’re sorely missing from Unity is nested prefabs. So we rolled this little ...

  7. SQL 设置登录名和密码

    1.打开SQL Server Manager管理器,在左面找到 ‘安全性’ 单击右键 选择‘新建”->“登录”, 如下图 2.弹出对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验 ...

  8. Python之列表生成式、生成器

    列表生成式 ——可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁: >>> [x * x for x in range(1, 11)] [1, 4, ...

  9. D. Vasya And The Matrix(Educational Codeforces Round 48)

    D. Vasya And The Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandar ...

  10. 程序 从存储卡 内存卡 迁移到 SD卡

    程序 从存储卡 内存卡  迁移到 SD卡 如果你想移动其他软件,在应用市场界面,点击“管理 > 应用搬家”,点击需要转移的应用旁边的“移至SD卡”即可.