13

I did not find explicit sqlite locking commands before inserting or updating rows into the table. Does sqlite handle the locking mechanism on it own? The pager module described in http://sqlite.org/lockingv3.html handles the locking mechanism. But I am not sure if there are any commands that the user can use to explicitly lock the tables. Please advice.

Thanks

4

2 回答 2

20

据我所知,没有专门的 sqlite 命令来控制锁定。但是,您可以让 sqlite 使用create transaction锁定数据库。例如:

BEGIN IMMEDIATE TRANSACTION;
...
COMMIT TRANSACTION;

BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

IMMEDIATE如果您阅读了我链接的文档,您应该对&EXCLUSIVE交易之间的区别有一个更好的了解。

可能值得注意的是,sqlite 中的锁适用于整个数据库,而不仅仅是单个表,这与LOCK TABLE其他 sql 数据库中的语句不同。

于 2012-06-08T22:13:37.747 回答
11

SQLite 执行任何必要的锁定以实现您的 SQL 语句描述的事务方案。特别是,如果您不描述任何内容,那么您将获得自动提交行为,在每个语句的持续时间内持有一个锁,然后在语句完成时删除。BEGIN TRANSACTION如果您需要更长的事务(通常是真的!),那么您可以使用(通常缩写为BEGIN)明确要求它们并使用COMMIT TRANSACTION(或ROLLBACK TRANSACTION)结束。事务处理通常由您的语言接口为您包装(因为这使得正确处理变得相当容易,将事务生命周期耦合到代码块或方法调用)但在基本级别,它归结为BEGIN/ COMMIT/ ROLLBACK

简而言之,你有交易。锁用于实现事务。您没有原始锁(这是一件好事;它们比您乍一看可能想的更难正确)。

于 2012-06-08T22:14:00.243 回答