在执行一个或多个存储过程时,您是否可以在过程周围而不是在其内部放置事务?
$db->beginTransaction();
$db->exec("call my_procedure()");
$db->exec("call my_second_procedure()");
$db->commit();
执行上述操作(pdo
)时,两次调用后事务是否都会提交,还是在每次调用运行后自动提交,使beginTransaction()
和commit()
无效?
答案 0 :(得分:1)
是的,你可以。
只要没有任何过程在内部执行COMMIT
或ROLLBACK
或START TRANSACTION
,并且只要没有任何过程(或您的代码)执行任何{{{ 3}},这很好用。
自动提交在您运行交易时无效,即使SELECT @@autocommit;
仍指示" 1,"这只表示当事务处于非活动状态时,会话处于自动提交模式。
答案 1 :(得分:-1)
我会说,“这取决于”: - )
首先,如果您使用的MyISAM不支持事务,PDO::beginTransaction()
仍然返回true,但没有事务开始。