goo*_*ing 8 php mysql transactions
我写
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");
在我写所有查询之前.然后检查它们是否都是真的然后写:
mysql_query("COMMIT");
但如果其中一个查询失败,我只是传递COMMIT查询.如果其中一个查询失败,我真的需要ROLLBACK函数吗?因为没有ROLLBACK它也有效.
谢谢.
Mic*_*zek 12
我认为你问是否有必要执行ROLLBACK,因为没有它,提交仍然没有得到应用.这在技术上是正确的,但仅仅因为交易仍未结束,因为您尚未结束交易.任何隐式提交事务的东西(例如,启动一个新事务)都会像你运行COMMIT一样,这与你想要的相反
使用事务的原因是将多个更改组合在一起,以便它们都以原子方式成功,否则,如果它们不能,则不要执行任何更改.换句话说,如果任何更改失败,则事务将使数据库处于逻辑上不一致的状态.
示例:在一个UPDATE中借记一个帐户,并在单独的UPDATE中记入另一个帐户.这代表了汇款.如果借记成功但信用失败,您应该回滚整个交易,否则看起来钱就消失了.
因此,如果其中一个更改失败,则预期的用途是回滚事务.
您似乎在说,在您的应用程序中,如果其中一个更改失败,则可以.这使我认为您已经不恰当地将更改分组到事务中.
确定哪一组更改必须一起成功,并将这些更改放入一个事务中.任何不适用于此组的更改都应位于单独的事务中.