SQLite中的显式锁定机制

时间:2012-06-08 21:56:16

标签: database sqlite

在将行插入或更新到表中之前,我没有找到显式的sqlite锁定命令。 sqlite是否自己处理锁定机制? http://sqlite.org/lockingv3.html中描述的寻呼机模块处理锁定机制。但我不确定用户是否可以使用任何命令来显式锁定表。请指教。

由于

2 个答案:

答案 0 :(得分:16)

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

BEGIN IMMEDIATE TRANSACTION;
...
COMMIT TRANSACTION;

BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

如果您阅读我链接的文档,您应该更好地了解IMMEDIATE& EXCLUSIVE次交易。

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

答案 1 :(得分:8)

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

简而言之,你有交易。锁用于实施事务。你没有原始锁(这是一件好事;它们比你从第一眼就想到的那样难以正确)。