использовать транзакции в моей хранимой процедуре MySQL с запросом на обновление, как убедиться, что обновление выполнено - PullRequest
0 голосов
/ 14 мая 2019

эта хранимая процедура обновляет 2 таблицы по заданному идентификатору

CREATE PROCEDURE `procedure_tst`(IN tkt_id bigint,OUT flag INTEGER)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND
BEGIN
SET flag=0; 
rollback;
END;

START TRANSACTION;
UPDATE tickets SET status_id = 2 WHERE id = tkt_id;
UPDATE user_ticket_log SET ticket_proceess_time =  NOW()- date_time WHERE 
ticket_id = tkt_id;

SET flag=1;
COMMIT;
END

проблема

я не знаю, сделано обновление или нет например, если я передаю 1 как tkt_id, флаг возврата процедуры = 1, который является истинным, но если я передаю 10000 как tkt_id, который не найден ни в одной из этих двух таблиц, он также возвращает флаг = 1, какое состояние или обработчик я должен использовать

1 Ответ

0 голосов
/ 14 мая 2019

UPDATE без измененных строк не создаст состояние NOT FOUND.

Вы должны изменить свою логику в соответствии с

CREATE PROCEDURE `procedure_tst`(IN tkt_id bigint,OUT flag INTEGER)
BEGIN

DECLARE rc INT;

START TRANSACTION;

UPDATE tickets SET status_id = 2 WHERE id = tkt_id;
SELECT ROW_COUNT() INTO rc;
IF rc>0 THEN
  UPDATE user_ticket_log SET ticket_proceess_time =  NOW()- date_time WHERE 
ticket_id = tkt_id;
  SET flag=1;
  COMMIT;
ELSE
  SET flag=0; 
  rollback;
END IF;

END
...