php 交易,php – 交易和例外

我想我会问,因为我不确定这个操作的结果是不是原始性质的交易.

当PHP中抛出异常停止执行时,如何处理数据库事务.是否会自动回滚,因为从PHP中删除了与数据库的连接,或者锁定是否仍然存在?

伪代码

TX Begin

Select Balance

Logic in PHP

Exception

Rollback

Commit

注意:我知道最好的编码实践要求我在catch中回滚.这只是我想知道的一个行为问题.

解决方法:

要确定MySQL在连接(会话)终止时如何处理事务,我们必须考虑是否启用自动提交模式.

>如果禁用自动提交并且在提交之前终止连接,则最后一次打开transaction is rolled back:

If a session that has autocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.

注意,启动事务在事务持续时间内隐式执行disable autocommit:

With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state.

>如果启用了自动提交,则无论如何都会提交任何成功的数据修改.如果数据修改语句导致错误,那么显然不会提交更改(嗯,在这种情况下没有变化).因此,在这种情况下,终止连接不会有任何区别.

但是,正如@MarkBaker所指出的那样,如果检测到错误以使代码的所有读者都明白这一点,那么显式回滚事务仍然是个好主意.请记住,你自己并不清楚这是如何工作的,如果他们没有在你的代码中看到明确的回滚,那么其他php程序员可能会有同样的问题.

标签:php,mysql

来源: https://codeday.me/bug/20190705/1391982.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值