二十三、MySQL基础系列笔记之储存过程与函数

作者: 温新

分类: 【MySql】

阅读: 1917

时间: 2020-11-08 13:08:08

存储过程

什么是存储过程

存储过程是一组事先编辑并存储在数据库中的SQL语句的集合。

如有2条可能会重复使用到的SQL语句,一条一条执行下去,比如重复10次,那么就要输入20次。更加高效的方法,将2条语句封装到存储过程种,执行10次,只组要调用10次存储过程就行了。

存储过程优点

  • 简化操作;
  • 提到代码重用率
  • 减少数据在数据库和应用服务器之间的传输,提高效率。

创建与使用存储过程

创建存储过程语法

CREATE PROCEDURE 存储过程名([IN|OUT|INOUT] 参数名 参数类型)
BEGIN
	SQL语句
END

参数解释:

​ IN参数:输入参数

​ OUT参数:输出参数

​ INOUT参数:既可以是输入也可以是输出

存储过程:可以有0个返回值,也可以有多个返回值。

使用存储过程

语法

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

存储过程案例

#案例一 空参存储过程
DELIMITER $$
CREATE PROCEDURE demo1()
BEGIN
	SELECT * FROM user;
END$$

# 调用
CALL demo1()$$ 

# 案例二 IN参数存储过程
DELIMITER $$
CREATE PROCEDURE demo2(IN uid int)
BEGIN
	SELECT * FROM user WHERE id > uid;
END$$

#调用 查询id大于3的所有用户
CALL demo2(3)$$

# 案例三 OUT参数过程过程
DELIMITER $$
CREATE PROCEDURE demo3(IN uid int, OUT uname VARCHAR(30))
BEGIN
	SELECT name INTO uname FROM user WHERE id = uid;
END$$

#调用。使用一个全局变量@uName来接收返回的结果
CALL demo3(2, @uName)$$
SELECT @uName$$

# 案例四 INOUT参数存储过程
DELIMITER $$
CREATE PROCEDURE demo4(INOUT x int, INOUT y INT)
BEGIN
	SET x=x*2;
	SET y=y*2;
END$$

# 调用
SET @xx=10$$
SET @yy=20$$
CALL demo4(@xx,@yy)$$
SELECT @xx,@yy$$

查看存储过程

查看存储过程状态语法

SHOW PROCEDURE STATUS [like 'pattern']; 
SHOW PROCEDURE STATUS LIKE 'demo1';

查看存储过程定义的语法

SHOW CREATE PROCEDURE 存储过程名;
SHOW CREATE PROCEDURE demo1;

删除存储过程

语法

DROP PROCEDURE 存储过程名;

案例

DROP PROCEDURE demo1;

函数

函数与存储过程非常类型,不同的是函数只能有一个返回值。

创建函数的语法

CREATE FUNCTION 函数名(参数名 参数类型) RETURNS 返回类型
BEGIN
	SQL语句
END

调用函数

SELECT 函数名(参数列表);

函数案例

# 案例1 没有参数返回的函数
DELIMITER $$
CREATE FUNCTION fun1() RETURNS INT
BEGIN
	# 声明变量
	DECLARE cCount INT DEFAULT 0;
	# 查询统计为变量赋值
	SELECT COUNT(*) INTO cCount FROM user;
	# 返回
	RETURN cCount;
END$$

# 调用
SELECT fun1()$$

# 案例2 有参数返回的函数
CREATE FUNCTION fun2(uname VARCHAR(20)) RETURNS INT
BEGIN
	DECLARE uid INT;
	SELECT id INTO uid FROM user WHERE name = uname;
	RETURN uid;
END$$

# 调用
SELECT fun2('李四')$$

查看函数

查看函数状态

SHOW FUNCTION STATUS [like 'pattern']; 
SHOW FUNCTION STATUS LIKE 'fun1'$$

查看函数定义的语法

SHOW CREATE FUNCTION 函数名;
SHOW CREATE FUNCTION fun1$$

删除函数

DROP FUNCTION 函数名;
DROP FUNCTION fun1$$

2020-11-08

请登录后再评论