当前位置:  开发笔记 > 编程语言 > 正文

SQLite事务无法按预期工作

如何解决《SQLite事务无法按预期工作》经验,为你挑选了1个好方法。

我准备了2个文件,"1.php"和"2.php".

"1.php"是这样的.

beginTransaction();

print "aaa
"; sleep(55); $dbh->commit(); print "bbb"; ?>

而"2.php"是这样的.

beginTransaction();

print "ccc
"; $dbh->commit(); print "ddd"; ?>

我执行"1.php".它启动一个事务并等待55秒.

所以,当我立即执行"2.php"时,我的期望是这样的:

    "1.php"正在进行交易

    "1"包含数据库锁

    "2"无法开始交易

    "2"无法获得数据库锁定

    "2"必须等待55秒

但是,测试走了另一条道路.当我执行"2"时,那么

    "2"立即返回了它的结果

    "2"没等

所以我不得不认为"1"无法获得事务,或者无法获得数据库锁定.

有人可以帮忙吗?



1> Tomalak..:

据我了解,SQLite事务不会锁定数据库,除非

一个.你制作它们EXCLUSIVE(它们是DEFERRED默认的),或者

湾 你实际上访问数据库

所以要么你明确地打电话

$dbh->exec("BEGIN EXCLUSIVE TRANSACTION");

或者在开始之前对DB 进行写操作(INSERT/ UPDATE)sleep().

引用文档(强调我的):

交易可以是延期交货,即时交易或独家交易.默认事务行为是延迟的. 延迟意味着在首次访问数据库之前,不会在数据库上获取锁.因此,对于延迟事务,BEGIN 语句本身不执行任何操作.在第一次读取或写入操作之前不会获取锁定.对数据库的第一次读取操作会创建一个SHARED锁定,第一次写入操作会创建一个RESERVED锁定.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有