存储过程是MySQL中一种可以被存储和重复调用的SQL语句块。存储过程可以使用流程控制语句编写复杂的逻辑,并封装在数据库服务器中。
存储过程的基本形式为:
sql
CREATE PROCEDURE procedure_name(param1 type, param2 type, ...)
BEGIN
-- SQL statements
END;
例如:
sql
CREATE PROCEDURE getCustomer(IN cust_id INT, OUT cust_name VARCHAR(100))
BEGIN
SELECT name INTO cust_name
FROM customers
WHERE id = cust_id;
END;
这会创建一个存储过程getCustomer,输入参数cust_id,输出参数cust_name。
调用存储过程使用CALL语句:
sql
SET @cust_name;
CALL getCustomer(1, @cust_name);
SELECT @cust_name;
这会调用getCustomer存储过程,并将输出保存到@cust_name变量中。
存储过程优点:
- 可重用:可以被重复调用,避免重复编写相同的SQL语句。
- 封装:将复杂的业务逻辑封装在数据库中,简化应用层代码。
- 安全:可以控制对存储过程的访问,而不是直接访问数据库表。
- 高性能:顺序执行SQL语句,减少客户端-服务器之间的通信,提高效率。
存储过程缺点:
- 可移植性差:存储过程的语法会因数据库类型而异。
- 调试难度大:存储过程中的错误不容易调试。
- 不直观:将逻辑封装在数据库中,不如编写应用层代码直观。