存储函数的原子性疑问:事务限制及执行上下文影响
存储函数与事务的原子性疑问
与可显式启动和提交事务的存储过程不同,存储函数不能包含执行显式或隐式提交或回滚的语句。官方文档对此规定十分明确,但解释禁止原因时仅提及SQL“标准”未做要求,交由厂商决定,这就略显模糊。
我有个疑问:当存储函数在SELECT或DO命令的上下文中被调用时,这些命令的原子性会对存储函数产生影响吗?
这种情况下,存储函数中包含的命令会被视为一个事务,还是像未使用START TRANSACTION的存储过程那样各自作为独立事务?
前者似乎是正确的,这甚至能解释为何函数体内禁止提交事务——若出现问题,SELECT或DO可自动回滚所有更改,从而维持**“要么全有要么全无”**的原则,但这更多是推断,而非官方明确答案,文档本应涵盖此内容却未涉及。
内容的提问来源于stack exchange,提问作者sp3ctre
相关产品推荐
相关产品推荐

