存储过程和函数是数据库中的一段SQL语句的集合。
studentinfo表数据:
存储过程的创建与调用
语法:
# 创建存储过程
DELIMITER $ # 修改分隔符
CREATE PROCEDURE pro1() # 创建存储过程
BEGIN # sql语句开始
SELECT gender,COUNT(gender) ct FROM studentinfo GROUP BY gender ORDER BY ct DESC;
END$ # sql语句结束
DELIMITER ; # 修改分隔符
# 调用存储过程
CALL pro1();
存储过程的查看和删除
语法:
存储过程变量的使用
语法:
# 存储过程变量
DELIMITER $ # 修改分隔符
CREATE PROCEDURE pro2() # 创建存储过程
BEGIN # sql语句开始
DECLARE var1 VARCHAR(50) DEFAULT ''; # 定义变量var1 varchar类型 默认为''
DECLARE var2 INT DEFAULT 0; # 定义变量var2 int类型 默认为0
SET var1 = 'hello word!'; # 变量赋值
SELECT COUNT(*) INTO var2 FROM studentinfo WHERE gender='男'; # 变量赋值
SELECT var1,var2; # 查询变量
END$ # sql语句结束
DELIMITER ; # 修改分隔符
# 调用存储过程
CALL pro2();
存储过程的传参
语法:
# 存储过程传参
DELIMITER $ # 修改分隔符
CREATE PROCEDURE pro4(IN orderColumn VARCHAR(50),OUT columnNames VARCHAR(50)) # 创建存储过程
BEGIN # sql语句开始
DECLARE sql1 VARCHAR(500) DEFAULT '';
SET columnNames='id,学生姓名,年龄,性别,班级id';
IF (orderColumn='' OR orderColumn IS NULL) THEN # 如果为空
SELECT * FROM studentinfo ORDER BY id;
ELSE # 否则
SET sql1=CONCAT("SELECT * FROM studentinfo ORDER BY ",orderColumn,";");
SET @SQL_sg=sql1; # 转为全局变量
PREPARE stmt_sg FROM @SQL_sg; # 准备sql语句
EXECUTE stmt_sg ; # 执行sql语句
DEALLOCATE PREPARE stmt_sg; # 释放sql语句
END IF;
END$ # sql语句结束
DELIMITER ; # 修改分隔符
# 调用存储过程
CALL pro4('',@columnNames);
SELECT @columnNames;
总结:
存储过程和函数的好处
1、提高代码的复用性
2、减少数据在数据库和引用服务器之间的传输,提高效率。
3、减少代码层面的业务处理。
4、以编程的思维去编写sql代码
打卡第13天,欢迎对数据库感兴趣的朋友一起讨论、交流,请多指教!