1

我如何偶尔写入具有频繁读者的 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;
}
4

2 回答 2

1

没有“内置”方式。增加忙碌超时。您可以通过执行将其设置为连接本身:

PRAGMA busy_timeout = milliseconds

(自 SQLite 3.7.15 起可用)

于 2013-10-26T10:50:08.970 回答
1

busyTimeout(或等效的PRAGMA busy_timeout告诉数据库等待的内置方式。

如果您想等待更长的时间,您应该使用更大的超时时间。

如果你的 PHP 足够新,至少有 SQLite 3.7,并且如果你的数据库没有通过网络文件系统访问,你应该考虑启用write-ahead logging,它可以防止读取器和写入器相互阻塞。

于 2013-10-26T19:42:19.450 回答