我试图在
v1
过程中使用 ROLLBACK 语句将局部变量
5
从 2
回滚到 my_proc()
,但 v1
不会回滚,保持 5
如下所示:
DELIMITER $$
CREATE PROCEDURE my_proc()
BEGIN
DECLARE v1 INT DEFAULT 2; -- v1 is 2
START TRANSACTION;
SELECT 5 INTO v1; -- v1 is 5
SELECT v1; -- v1 is 5
ROLLBACK; -- Here
SELECT v1; -- v1 is 5
END$$
DELIMITER ;
下面是实际结果,
v1
没有回滚,保持5
:
mysql> CALL my_proc();
+------+
| v1 |
+------+
| 5 |
+------+
1 row in set (0.00 sec)
+------+
| v1 |
+------+
| 5 |
+------+
1 row in set (0.00 sec)
那么,如何回滚局部变量呢?
回滚回滚数据库事务,取消它对表中的数据所做的任何更改。更改变量的值不会保存在 mysql 表中,因此回滚不会将更改回滚到变量。
唯一的解决方法是保留变量的原始值,并在满足某些条件时恢复它。