如何偶尔写入具有频繁读取器的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;
}
busyTimeout
(或等效的PRAGMA busy_timeout
)是告诉数据库等待的内置方法。
如果要等待更长时间,则应使用更大的超时。
如果您的 PHP 足够新,至少具有 SQLite 3.7,并且您的数据库不是通过网络文件系统访问的,则应考虑启用预写日志记录,这可以防止读取器和写入器相互阻塞。
没有"内置"方法。增加繁忙超时。您可以通过执行以下命令将其设置为连接本身:
PRAGMA busy_timeout = milliseconds
(自SQLite 3.7.15起可用)