此文章主要向大家描述的是PHP + MySQL事务操作的实际应用代码演示,如果你对PHP + MySQL事务操作的实际应用代码感兴趣的话,以下的文章就可以帮助你了。
+以下的文章主要向大家描述的是PHP + MySQL事务操作的实际应用代码演示,我们大家都知道在实际LAMP的应用中,一般PHP所使用的是AdoDB来对MySQL数据库进行操作,下面给出AdoDB相应的代码方便大家查阅:
- <?php
- //...
- $adodb->startTrans();
实际,getOne所调用的查询也可以直接放到rowLock来进行,这里只是为了演示效果能更明显些。
- $adodb->rowLock('book','book_id=123');
- $bookNumber=$adodb->getOne("SELECTbook_numberFROMbookWHEREbook_id=123");
- $adodb->execute("UPDATEbookSETbook_numberbook_number=book_number-1WHEREbook_id=123");
- $adodb->completeTrans();
- //...
- ?>
其中,rowLock的方法就是调用的FOR UPDATE来实现的行锁,你可能会想把“FOR UPDATE”直接写到$adodb->getOne()调用的那条SQL语句里面去实现行锁的功能,不错,那样确实可以,但是并不是所有的数据库都使用“FOR UPDATE”语法来实现行锁功能,比如Sybase使用“HOLDLOCK”的语法来实现行锁功能,所以为了你的数据库抽象层保持可移植性,我还是劝你用rowLock来实现行锁功能,至于可移植性就交给AdoDB好了,嗯,有点扯远了,今儿就说到这里了。
上述的相关内容就是对PHP + MySQL事务操作的代码演示的描述,希望会给你带来一些帮助在此方面。
附:
AdoDB中存在一个setTransactionMode()方法,能够设置事务的隔离级别,如下:
- SetTransactionModeallowsyoutopassinthetransactionmodetouseforall
subsequenttransactionsforthatconnectionsession.Note:ifyouhavepersistent
connectionsandusingmysqlormssql,youmighthavetoexplicitlyresetyour
transactionmodeatthebeginningofeachpagerequest.Thisisonlysupportedinpostgresql,
mssql,mysqlwithInnoDBandoci8currently.Forexample:- $db->SetTransactionMode("SERIALIZABLE");
- $db->BeginTrans();
- $db->Execute(...);$db->Execute(...);
- $db->CommiTrans();
- $db->SetTransactionMode("");//restoretodefault
- $db->StartTrans();
- $db->Execute(...);$db->Execute(...);
- $db->CompleteTrans();
- Supportedvaluestopassin:
- *READUNCOMMITTED(allowsdirtyreads,butfastest)
- *READCOMMITTED(defaultpostgres,mssqlandoci8)
- *REPEATABLEREAD(defaultmysql)
- *SERIALIZABLE(slowestandmostrestrictive)
以上的相关内容就是对PHP + MySQL事务操作的代码演示的介绍,望你能有所收获。
【编辑推荐】
- MySQL命令导数据的实际操作与代码
- MySQL基本操作,新手入门宝典
- MySQL常用命令大汇总
- MySQL数据库安全设置的操作流程
- 实现MySQL 用户密码的设置步骤