问题
Everywhere I look it seems MySQL stored procedures can do transactions. Yet when I declare my stored function
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 //
I get
Error Code: 1422. Explicit or implicit commit is not allowed in stored function or trigger.
回答1:
Actually you are not allowed transactions inside stored functions. You are allowed transactions inside stored procedures only.
create procedure test( a int )
MODIFIES SQL DATA
BEGIN
START TRANSACTION ;
update t set col='some value' where id=a ;
COMMIT ;
END //
To return values from the SP, use output parameters or use the result set from the last select statement in the SP.
来源:https://stackoverflow.com/questions/16969875/error-code-1422-explicit-or-implicit-commit-is-not-allowed-in-stored-function