Mysql

在不送出或回滾事務的情況下離開/退出儲存過程是否安全?

  • March 20, 2021

像下面的程式碼那樣安全嗎?

create definer=`root`@`%` procedure `test`()
label: begin

declare exit handler for sqlexception rollback;
start transaction;

select condition from table where id = someid for update;

if condition = false then
 leave label;
end if;

// some query;
commit;
end$$

我認為事務控制根本屬於儲存過程,除了一些非常特殊的情況(例如,無論“外部”事務發生什麼,即“自治事務”),您都希望記錄審計記錄。該過程無法知道它是否是更大工作單元的一部分,因此,如果它送出或回滾,它可能會違反更大事務的一致性規則。

在實施業務規則的級別送出或回滾。

換句話說,是的,在大多數情況下,“在不送出或回滾的情況下離開/退出儲存過程”並讓呼叫者決定是正確的做法(前提是如果發生異常,您不隱藏異常)。

正如我對問題的評論所提到的,答案是“否”,尤其是FOR UPDATE它會一直保持鎖定直到呼叫COMMITor 。ROLLBACK

引用自:https://dba.stackexchange.com/questions/251312