MySQL存储过程是什么
MySQL存储过程是一段预编译的SQL代码,存储在数据库中,并可以通过一个单独的调用来执行。
存储过程可以包含一系列的SQL语句、流程控制语句、变量定义等。
可以接收参数和返回值,并且可以在多个应用程序中共享和重复使用。
MySQL存储过程的作用是什么
1、提高性能:存储过程可以在数据库服务器中预编译,减少每次执行sql语句时所需的解析和编译时间。存储过程可以减少网络流量,因为客户端调用值调用存储过程,不是发sql语句
2、提高安全性:存储过程可以帮助防止sql注入,因为,存储过程的参数时预编译的,不会直接插入到sql语句中。
3、简化业务逻辑:可以将复杂业务封装到一个可重复使用的程序中,简介且易于维护。还可以将一系列的sql语句组织成一个事务,还可以确保数据的一致性和完整性。
处理事务时,可以将一系列的sql封装成事务,将其封装成存储过程。
处理异常时,用户注册场景,写一个存储过程处理注册操作,存储过程会检查是否满足需求,满足插入到数据库,否则抛出异常。
4、共享代码: 存储过程可以在多个应用程序之间共享和重复使用。避免重复编写相同sql,提高效率。
一个公司可能有多个系统,财务系统/OA/存储管理系统......都需要访问同一个数据库执行不同数据操作时,可以编写存储过程执行操作。会更高效。
mysql存储过程的使用
- 设置mysql的语句分隔符,以免在存储过程中使用分号被误认为语句结束。
DELIMITER $$
-- IN输入参数, OUT输出参数
CREATE PROCEDURE my_proc(IN param1 INT, OUT param2 INT)
BEGIN
-- 声明两个变量及其类型
DECLARE var1 INT DEFAULT 0;
DECLARE var2 VARCHAR(50);
-- 判断参数是否为空
IF param1 IS NULL THEN
-- SIGNAL
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Parameter cannot be null';
END IF;
-- 查询数据
-- SELECT INTO ,查询数据并将结果赋值给变量,此句表示查询my_table表,根据传入参数param1,查询col1,col2将结果赋值给var1,var2
SELECT col1, col2 INTO var1, var2 FROM my_table WHERE col1 = param1;
-- 判断查询结果是否为空
IF var1 IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No data found';
END IF;
-- 修改数据
UPDATE my_table SET col2 = CONCAT(col2, ' updated') WHERE col1 = param1;
-- 返回结果
SET param2 = var1;
END $$
DELIMITER ;
调用此存储过程:
call my_proc(30,@result); -- 30作为入参传给存储过程,使用变量@result作为输出参数product的容器。
select @result; -- 查询存储过程输出参数值的结果集。
如何查看已创建的存储过程:
show create procedure procedureName; # 可以查看指定存储过程的完整定义,包含输入参数、输出参数、主体及其他任何选项。
show procedure status where db = 'databaseName'; # 查看指定数据库的所有存储过程信息,包含名称、数据库、创建时间等。
select * from information_schema.Routines where routine_type = 'procedure' and routine_schema='databaseName'; # 指定数据库查询
什么时候需要创建存储过程? 什么时候不需要创建
执行常见的重复性任务或者包含复杂业务逻辑的任务时可以创建存储过程。
以下几种情况是不需要创建存储过程的。
1、简单查询:只需要执行简单的select ,不需要创建。
2、动态查询:根据不同参数生成,存储过程也不是最佳方案。
3、低频率使用: 偶尔执行某些任务,没必要创建存储过程。