我怎么偶尔写一个有频繁读者的sqlite数据库?我正在使用PHP,但这并不重要。我理解query()将返回SQLITE_BUSY
,我可以再试一次,我可以调用busyTimeout
来帮助,但我希望有一种内置方式告诉数据库等待自己。现在,我正在使用:
function wait_query_db($db, $query) {
do {
$db->busyTimeout(1000);
$result = @$db->query($query);
} while ($db->lastErrorCode() == SQLITE_BUSY);
return $result;
}
答案 0 :(得分:1)
没有“内置”的方式。增加忙碌超时。您可以通过执行以下命令将其设置为连接:
PRAGMA busy_timeout = milliseconds
(自SQLite 3.7.15起可用)
答案 1 :(得分:1)
busyTimeout
(或等效的PRAGMA busy_timeout
)是告诉数据库等待的内置方式。
如果您想等待更长时间,则应使用更长的超时。
如果你的PHP足够新,你至少拥有SQLite 3.7,并且你的数据库没有通过网络文件系统访问,你应该考虑启用write-ahead logging,这可以防止读者和作者互相阻塞