错误代码:1422.存储函数或触发器中不允许显式或隐式提交

bob*_*obo 7 mysql stored-procedures stored-functions

无论我到哪里,看起来MySQL存储过程都可以进行交易.然而,当我声明我的存储函数时

create function test( a int )
returns int
MODIFIES SQL DATA
BEGIN
  START TRANSACTION ;
  update t set col='some value' where id=a ;
  COMMIT ;
  return 0 ;
END //
Run Code Online (Sandbox Code Playgroud)

我明白了

错误代码:1422.存储函数或触发器中不允许显式或隐式提交.

bob*_*obo 11

实际上,您不允许在存储函数内进行事务处理.您只能在存储过程中进行事务处理.

create procedure test( a int )
MODIFIES SQL DATA
BEGIN
  START TRANSACTION ;
  update t set col='some value' where id=a ;
  COMMIT ;
END //
Run Code Online (Sandbox Code Playgroud)

要从SP返回值,请使用输出参数或使用SP中最后一个select语句的结果集.

  • 另外值得注意的是,如果从触发器中调用该过程,您仍将获得"存储函数或触发器_中不允许使用_Explicit或隐式提交"错误.令人沮丧. (10认同)
  • 嘿,这有点旧,但我现在遇到了这个问题。有什么办法可以解决吗? (4认同)