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

时间:2013-06-06 18:49:39

标签: 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 //

我得到了

  

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

1 个答案:

答案 0 :(得分:11)

实际上,您不允许在存储的功能中进行交易。您只能在存储的 过程 中进行交易。

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

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