【问题标题】:Rollback without START TRANSACTION statement is not working in MySQL Stored Procedure没有 START TRANSACTION 语句的回滚在 MySQL 存储过程中不起作用
【发布时间】:2015-02-25 14:30:26
【问题描述】:

我正在使用 mysql v5.6。

通过存储过程在用户表中插入重复记录后抛出异常,这很好但无法回滚表POSTS。

这是 SP 的 SQL 代码:

 DELIMITER //
 CREATE PROCEDURE usp_add_user_tests
  ( IN `i_name` VARCHAR(50), 
  IN `i_email` VARCHAR(100), 
  IN `i_status` TINYINT(1) UNSIGNED, 
  OUT `p_sqlcode` INT(11) UNSIGNED, 
  OUT `p_status_message` VARCHAR(100) 
 ) 
 MODIFIES SQL DATA 

 BEGIN 
 DECLARE duplicate_key CONDITION FOR 1062; 
 DECLARE EXIT HANDLER FOR duplicate_key 
 BEGIN SET p_sqlcode=1062; SET p_status_message='Duplicate key error';
ROLLBACK ; 
 END; 

 SET p_sqlcode=0; 

 INSERT INTO posts (title) 
 VALUES('test'); 

 INSERT INTO users (name,email,status) 
 VALUES(i_name,i_email,i_status); 

 IF p_sqlcode<>0 THEN 
 SET p_status_message=CONCAT(p_status_message,' when inserting new user'); 
 ELSE
 SET p_status_message='Success'; 
 END IF; 

 END //
DELIMITER ; 

是否可以在不使用 Start Transaction 语句的情况下回滚表 posts

【问题讨论】:

标签: mysql stored-procedures transactions rollback


【解决方案1】:

我认为您实际上并没有开始“交易”。我很确定您需要实现此处列出的机制之一:https://dev.mysql.com/doc/refman/5.7/en/commit.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多