Php SQLite事务不';I don’我没有按预期工作
我准备了两个文件,“1.php”和“2.php” “1.php”是这样的Php SQLite事务不';I don’我没有按预期工作,php,sqlite,pdo,transactions,Php,Sqlite,Pdo,Transactions,我准备了两个文件,“1.php”和“2.php” “1.php”是这样的 <?php $dbh = new PDO('sqlite:test1'); $dbh->beginTransaction(); print "aaa<br>"; sleep(55); $dbh->commit(); print "bbb"; ?> <?php $dbh = new PDO('sqlite:test1'); $dbh->beginTransaction()
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();
print "aaa<br>";
sleep(55);
$dbh->commit();
print "bbb";
?>
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();
print "ccc<br>";
$dbh->commit();
print "ddd";
?>
“2.php”是这样的
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();
print "aaa<br>";
sleep(55);
$dbh->commit();
print "bbb";
?>
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();
print "ccc<br>";
$dbh->commit();
print "ddd";
?>
我执行“1.php”。它启动一个事务并等待55秒
因此,当我立即执行“2.php”时,我的期望是:
有人能帮忙吗?据我所知,SQLite事务不会锁定数据库,除非
- a。您将它们设置为独占的(默认情况下,它们是延迟的),或者
- b。实际上,您可以访问数据库
$dbh->exec("BEGIN EXCLUSIVE TRANSACTION");
或者在开始sleep()
之前对数据库执行写入操作(INSERT
/UPDATE
)
引用(我的重点):
交易可以延期,
直接的,排他的默认值
事务行为被延迟。
延迟意味着不需要锁
在数据库上获取,直到
首先访问数据库因此与
延迟的事务,开始
语句本身不起任何作用。锁定
直到第一次读取时才获取
或写操作。首读
对数据库的操作将创建
共享锁和第一次写入
操作创建保留锁