在MySQL过程中局部变量不会回滚[关闭]

whhtz7ly  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(55)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

18天前关门了。
Improve this question
我尝试在my_proc()过程中使用ROLLBACK statement将局部变量v15回滚到2,但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)


那么,如何回滚局部变量呢?

kyvafyod

kyvafyod1#

Rollback回滚数据库事务,取消它对表中数据所做的任何更改**。更改变量的值不会保存在mysql表中,因此rollback不会回滚对变量的更改。
唯一的解决方法是保留变量的原始值,并在满足某些条件时恢复它。

相关问题