Mysql基础学习(十五)--存储过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40990836/article/details/101513543

存储过和函数

存储过程和函数。

  1. 提高代码的重用性
  2. 简化操作
  3. 减少的编译次数。并且减少了和数据库的连接次数,提高了效率。
    存储过程含义: 一组预先编译好的SQL语句的集合。
创建语法
CREATE PROCEDURE 存储过程名字(参数列表)
BEGIN
	存储过程体 (一组合法的SQL语句)
END

注意:

  1. 参数列表包含三部分
    参数模式, 参数名, 参数类型
    举例子:
IN stuname VARCHAR(20)

参数模式
IN : 该参数可以作为输入,也就是该参数需要调用方传入值
OUT : 该参数可以作为输出, 也就是该参数可以作为返回值
INOUT : 该参数以及可以作为输入,也可以作为输出, 也就是该参数既需要传入值,又可以返回值
2. 如果存储过程体仅仅只有一句话,BEGIN END 可以省略.
3. 存储过程提的每条SQL语句的结尾必须要加分号.存储过程的结尾可以使用 DELIMITER 重新设置
语法:

DELIMITER 结束标记

DELIMITER $
调用语法
CALL 存储过程名(实参列表);

创建一个admin 的表

CRAETE TABLE admin(
	id INT(6) PRIMARY KEY AUTO_INCREMENT,
	aName VARCHAR(20),
	sex CHAR(2) DEFAULT '男'
);
带IN的存储过程

案例1: 使用存储模式保存三个用户
创建存储过程

 DELIMITER $
 CREATE PROCEDURE  myp1()
    -> BEGIN
    -> INSERT INTO admin (aName,sex)
    -> VALUES
    -> ('gss','男'),('刘华强','男'),('小薰儿','女');
    -> END $
    
# 调用存储过程
CALL myp1()$
# 查看 admin 表格
SELECT * FROM admin $
# 结果
+----+--------+------+
| id | aName  | sex  |
+----+--------+------+
|  1 | gss    ||
|  2 | 刘华强 ||
|  3 | 小薰儿 ||
+----+--------+------+
3 rows in set (0.00 sec)

案例2 : 创建带in 模式参数的存储过程,根据姓名查询性别

CREATE PROCEDURE myp2(IN aName VARCHAR(20))
BEGIN 
SELECT sex
FROM admin
WHERE admin.aNmae = aName;
END$
# 调用myp2;
CALL myp2('gss');
# 返回
+------+
| sex  |
+------+
||
+------+

案例2: 创建存储过程实现,查询是否存在 姓名 和 性别

# 创建存储过程
CREATE PROCEDURE myp3(IN aName VARCHAR(20),IN sex CHAR(2))
BEGIN 
SELECT COUNT(*)
FROM admin
WHERE admin.aName = aName ADN admin.sex = sex;
END $
# 调用存储过程
CALL myp3('gss','男') $
# 返回结果
+----------+
| COUNT(*) |
+----------+
|        1 |
+----------+
带OUT模式的存储过程

案例1 : 根据 id 返回 aname 和 sex

# 创建存储过程
CREATE PROCEDURE myp7(IN id INT(6),OUT aName VARCHAR(20),OUT sex CHAR(2))
BEGIN
SELECT admin.aName , admin.sex INTO aName, sex
FROM admin
WHERE admin.id = id;
END $
# 调用存储过程
CALL myp7(1,@aname,@sex) $
Query OK, 1 row affected (0.01 sec)
# 查询 @aname 和 @sex
SELECT @aname , @sex;
+--------+------+
| @aname | @sex |
+--------+------+
| gss    ||
+--------+------+
带INOUT模式的存储过程

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

CREATE PROCEDURE myp8(INOUT a INT,INOUT b INT)
BEGIN
	SET a = a*2;
	SET b = b*2;
END $
# 调用 并定义两个用户变量
SET @m = 10 $
SET @n = 20 $
CALL myp8(@m,@n)$
# 查询
SELECT @m,@n $
+------+------+
| @m   | @n   |
+------+------+
|   20 |   40 |
+------+------+
删除存储过程
DROP PROCEDURE 存储过程名

一次只可以删除一个存储过程

查看存储过程的信息
SHOW CREATE PROCEDURE 存储过程名;

猜你喜欢

转载自blog.csdn.net/qq_40990836/article/details/101513543