MySQL 过程中不会回滚局部变量

问题描述 投票:0回答:1

我试图在

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 stored-procedures rollback local-variables
1个回答
0
投票

回滚回滚数据库事务,取消它对表中的数据所做的任何更改。更改变量的值不会保存在 mysql 表中,因此回滚不会将更改回滚到变量。

唯一的解决方法是保留变量的原始值,并在满足某些条件时恢复它。

© www.soinside.com 2019 - 2024. All rights reserved.