在我的 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
此存储过程在给定 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