我正在使用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 ;
是否可以在不使用启动交易语句的情况下回滚表格帖子。
答案 0 :(得分:2)
我认为你实际上没有开始“交易”。我非常确定您需要实现此处列出的一种机制:https://dev.mysql.com/doc/refman/5.7/en/commit.html