存储过程和函数。
CREATE PROCEDURE 存储过程名字(参数列表)
BEGIN
存储过程体 (一组合法的SQL语句)
END
注意:
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 '男'
);
案例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 |
+----------+
案例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 | 男 |
+--------+------+
案例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 存储过程名;