有时,我只需要从数据库中删除一个对象A,这需要3个sql语句.
有时,我需要从数据库中删除一个对象B,这需要4个sql语句,并且还需要查找和删除对象B拥有的所有对象A.
所以在函数delete_A()中,我在一个事务中执行那些语句.在delete_B()函数内部,我想运行一个覆盖delete_A()内部活动的大型事务.如果删除B的整个原子都失败了,我需要在回滚中恢复它的所有A.
如果尚未运行更大的事务,如何更新delete_A()的定义以仅打开新事务.
我希望能够做这样的事情,但autTraommit属性似乎没有被beginTransaction()改变
function delete_A($a){ global $pdo; $already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); if(!$already_in_transaction){ $pdo->beginTransaction(); } //Delete the A if(!$already_in_transaction){ $pdo->commit(); } } function delete_B($b){ global $pdo; $pdo->beginTransaction(); foreach($list_of_As as $a){ delete_A($a); } $pdo->commit(); }