10

在我看来,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。存储函数或触发器中不允许显式或隐式提交。

4

1 回答 1

14

实际上,您不允许在存储函数中进行交易。仅允许在存储过程中进行事务。

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 语句的结果集。

于 2013-06-06T18:49:38.793 回答