存储过程 事务 handler
事务与存储过程以及两者的区别 - 言卿· - 博客园
https://www.cnblogs.com/cds98/p/8990539.html
SQL知识点五——存储过程和事务(超详细)_存储过程事务控制-CSD…
https://blog.csdn.net/qq_62859013/article/details/143313254
mysql储存过程与事务处理_mob64ca12d9b014的技术博客_51CTO博客
https://blog.51cto.com/u_16213338/12575341
存储过程和事务是数据库管理系统中的两个重要概念,分别用于提高操作效率和保证数据一致性。
存储过程
存储过程是一组预编译的SQL语句,存储在数据库中,用户可以通过调用存储过程来执行这些语句。它的主要特点包括:
-
减少网络开销:存储过程在服务器端执行,避免了频繁的客户端与服务器之间的通信。
-
提高执行效率:存储过程在创建时被编译,后续调用无需再次编译。
-
增强安全性:通过封装复杂逻辑,减少SQL注入的风险。
创建存储过程
以下是创建存储过程的基本语法:
CREATE PROCEDURE procedure_name (parameters)
BEGIN
-- SQL语句
END;
示例:创建一个插入用户记录的存储过程:
DELIMITER //
CREATE PROCEDURE InsertUser(IN userName VARCHAR(100), IN userEmail VARCHAR(100))
BEGIN
INSERT INTO users (name, email) VALUES (userName, userEmail);
END //
DELIMITER ;
调用存储过程
使用 CALL 语句调用存储过程:
CALL InsertUser('张三', 'zhangsan@example.com');
事务
事务是一组逻辑上的操作单元,这些操作要么全部成功,要么全部失败。事务的核心是保证数据的一致性,其主要特性为ACID:
-
原子性:事务中的所有操作要么全部执行,要么全部回滚。
-
一致性:事务执行后,数据库从一个一致性状态转变为另一个一致性状态。
-
隔离性:并发事务之间互不干扰。
-
持久性:事务提交后,其结果永久保存。
事务操作
在MySQL中,事务的基本操作包括:
START TRANSACTION; -- 开始事务
-- SQL操作
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
示例:转账事务
以下示例展示了如何使用事务实现用户A向用户B转账:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE user_id = 'B';
COMMIT;
如果在执行过程中发生错误,可以使用 ROLLBACK 回滚事务:
ROLLBACK;
存储过程与事务结合
存储过程可以与事务结合使用,以实现复杂的业务逻辑。例如,以下存储过程实现了转账操作,并在发生错误时回滚事务:
DELIMITER //
CREATE PROCEDURE TransferFunds()
BEGIN
DECLARE err INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err = 1;
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE user_id = 'B';
IF err > 0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END //
DELIMITER ;
调用存储过程:
CALL TransferFunds();
存储过程和事务的结合不仅提高了代码的可维护性,还增强了数据操作的可靠性和一致性。
了解详细信息:

浙公网安备 33010602011771号