Mysql学习笔记(9):存储过程

爱被打了一巴掌 2022-05-22 01:42 241阅读 0赞

存储过程和函数:类似于java中的方法
好处:
1、提高代码的重用性

2、简化操作

存储过程
含义
:一组预先编译好的SQL语句的集合,理解成批处理语句

1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

一、存储过程语法

1. 存储过程的创建

语法

-——>

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END

<——-
参数列表包含三部分: 参数模式 参数名 参数类型
例如: in stuname varchar(20)

参数模式

  • in:该参数可以作为输入,也就是该参数需要调用方传入值
  • out:该参数可以作为输出,也就是该参数可以作为返回值
  • inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

注意:

  • SQL中结束标记默认是’;’ ,而在存储过程中每条SQL语句最后都需要使用结束标记表明一个SQL的结束。
  • 如果使用结束标记 ‘;’ ,对于一个存储过程,如果执行了一条SQL语句,遇到 ‘;’ 时服务器会认为你当前的存储过程定义结束了,此时会产生错误。
  • 使用DELIMITER关键字设置存储过程的结束标记,用“DELIMITER 结束标记”声明当前段分隔符,让编译器把两个”结束标记”之间的内容当做存储过程的代码,而不是普通的SQL语句;
  • 最后需要执行 DELIMITER ; 将分隔符还原。

语法:
delimiter 结束标记
案例:

  1. DELIMITER $
  2. CREATE PROCEDURE student()
  3. BEGIN
  4. SELECT * FROM student;
  5. END $
  6. DELIMITER ;

-————-

2. 存储过程的调用

CALL 存储过程名(实参列表);

==========

二 、案例演示

1. 空参列表

1.1 创建存储过程

  1. DELIMITER $
  2. CREATE PROCEDURE myp1()
  3. BEGIN
  4. INSERT INTO student(NAME,grade) VALUES('盖伦',50);
  5. END $
  6. DELIMITER ;

1.2 调用

  1. CALL myp1();

说明:每次调用这个存储过程都会执行存储体中的SQL语句,即向student表中插入一条语句。

-——

2. 带in模式参数的存储过程

2.1 创建

  1. DELIMITER $
  2. CREATE PROCEDURE myp2(IN stuName VARCHAR(20))
  3. BEGIN
  4. SELECT s.* FROM student s WHERE s.name = stuName;
  5. END $
  6. DELIMITER ;

2.2 调用

  1. CALL myp2('盖伦');

说明:

  • 定义了一个带输入参数的存储过程,每次调用都会根据参数查询student表。

2.3 拓展
#案例 :创建存储过程实现,用户是否登录成功

  1. CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
  2. BEGIN
  3. DECLARE result INT DEFAULT 0;#声明并初始化
  4. SELECT COUNT(*) INTO result#赋值
  5. FROM admin
  6. WHERE admin.username = username
  7. AND admin.password = PASSWORD;
  8. SELECT IF(result>0,'成功','失败');#使用
  9. END $
  10. #调用
  11. CALL myp3('张飞','8888')$

说明:

  • 定义了一个双入参的存储过程,里面定义了一个局部变量,并通过查询admin表进行赋值。
  • 通过判断admin值显示登陆 成功/失败

-

3. 带out 模式参数的存储过程

3.1 创建

  1. DELIMITER $
  2. CREATE PROCEDURE myp4(IN stuName VARCHAR(20),OUT grade INT)
  3. BEGIN
  4. SELECT s.grade INTO grade FROM student s WHERE s.name = stuName;
  5. END $
  6. DELIMITER ;

这里定义的OUT参数作为一个局部变量存在

3.2 调用

  1. CALL myp4('盖伦',@grade);

定义一个用户变量grade存入存储过程中,让它保存数据。

3.3 查看数据

  1. SELECT @grade;

-——

4. 带inout模式参数的存储过程

案例:传入a和b两个值,最终a和b都翻倍并返回

4.1 创建

  1. DELIMITER $
  2. CREATE PROCEDURE myp5(INOUT a INT ,INOUT b INT)
  3. BEGIN
  4. SET a=a*2;
  5. SET b=b*2;
  6. END $
  7. DELIMITER ;

4.2 调用

  1. SET @m=10;
  2. SET @n=20;
  3. CALL myp8(@m,@n);
  4. SELECT @m,@n;

==========

三、删除存储过程

语法:drop procedure 存储过程名

示例:

  1. DROP PROCEDURE p1;

==========

四、查看存储过程的信息

  1. DESC myp2;
  2. SHOW CREATE PROCEDURE myp2;

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql存储过程学习笔记(1)

    最近由于测试的需求,需要往数据库中插入大量的模拟数据,组织要求使用存储过程,所以这两天一直在看这个,下面把这两天的学习心得给大家分享下 1.      创建自己的第一个pro

    相关 MySQL 存储过程笔记

    1.SET @a=1; 在存储过程中如果使用这样的一个变量,这是一个会话变量,什么叫会话变量也就是一个连接过来这个变量是与这个连接保持一致的一种变量类型 从C++对象而言就