在存储过程之外提交事务

时间:2015-01-28 20:03:42

标签: php mysql stored-procedures transactions

在执行一个或多个存储过程时,您是否可以在过程周​​围而不是在其内部放置事务?

$db->beginTransaction();

$db->exec("call my_procedure()");
$db->exec("call my_second_procedure()");

$db->commit();

执行上述操作(pdo)时,两次调用后事务是否都会提交,还是在每次调用运行后自动提交,使beginTransaction()commit()无效?

2 个答案:

答案 0 :(得分:1)

是的,你可以。

只要没有任何过程在内部执行COMMITROLLBACKSTART TRANSACTION,并且只要没有任何过程(或您的代码)执行任何{{{ 3}},这很好用。

自动提交在您运行交易时无效,即使SELECT @@autocommit;仍指示" 1,"这只表示当事务处于非活动状态时,会话处于自动提交模式。

答案 1 :(得分:-1)

我会说,“这取决于”: - )

首先,如果您使用的MyISAM不支持事务,PDO::beginTransaction()仍然返回true,但没有事务开始。

请参阅http://php.net/manual/en/pdo.transactions.php