Откат без инструкции START TRANSACTION не работает в хранимой процедуре MySQL

Я использую mysql v5.6.

После вставки повторяющейся записи в таблицу пользователей через хранимую процедуру возникает исключение, и это хорошо, но невозможно выполнить откат для таблицы POSTS.

Вот коды SQL для SP:

 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 ;

Можно ли выполнить откат для таблицы posts без использования оператора Start Transaction.


person Faiyaz Alam    schedule 29.12.2014    source источник
comment
Попробуйте использовать autocommit. 13.3.1 Синтаксис START TRANSACTION, COMMIT и ROLLBACK.   -  person wchiquito    schedule 03.01.2015


Ответы (1)


arrow_upward
3
arrow_downward

Я не думаю, что вы на самом деле начали "транзакцию". Я почти уверен, что вам нужно реализовать один из перечисленных здесь механизмов: https://dev.mysql.com/doc/refman/5.7/en/commit.html

person 7 Reeds    schedule 11.11.2015