在我的 MySQL 存储过程中使用事务和更新查询 如何确保更新完成

use transactions in my MySQL stored procedure with update query how to ensure update is done

此存储过程在给定 ID

上更新 2 table 秒
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

the problem

不知道有没有更新 例如,如果我将 1 作为 tkt_id 传递给过程 return flag=1,这是正确的,但是如果我将 10000 作为 tkt_id 传递,这在这两个 table 中都找不到它还 return flag=1 我应该使用什么状态或处理程序

没有更改行的 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