微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP操作MySQL事务实例

本文实例讲述了PHP操作MysqL事务的方法分享给大家供大家参考。具体方法如下:

一般来说,事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义:

① 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。 ② 一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。 ③ 隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。 ④ 持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。

PHP中,MysqLi 已经很好的封装了MysqL事务的相关操作。如下示例:

代码如下:
autocommit(false);//开始事物 $MysqLi->query($sql1); $MysqLi->query($sql2); if(!$MysqLi->errno){ $MysqLi->commit(); echo 'ok'; }else{ echo 'err'; $MysqLi->rollback(); }
在这里,我们再使用 PHP MysqL 系列函数执行事务。
代码如下:
sql1 = "update User set scoreCount = scoreCount +10 where ID= '123456'"; $sql2 = "update scoreDetail set Fscore = 300 where ID= '123456'"; $sql3 = "insert into scoreDetail ID,60)"; $conn = MysqL_connect('localhost',''); MysqL_select_db('DB_Lib2Test'); MysqL_query('start transaction'); //MysqL_query('SET autocommit=0'); MysqL_query($sql1); MysqL_query($sql2); if(MysqL_errno ()){ MysqL_query('rollback'); echo 'err'; }else{ MysqL_query('commit'); echo 'ok'; } // MysqL_query('SET autocommit=1'); // MysqL_query($sql3);

在这里要注意:

MyISAM:不支持事务,用于只读程序提高性能 InnoDB:支持ACID事务、行级锁、并发 Berkeley DB:支持事务

希望本文所述对大家的PHP+MysqL数据库程序设计有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐