2012-06-08 24 views

回答

12

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

BEGIN IMMEDIATE TRANSACTION; 
... 
COMMIT TRANSACTION; 

BEGIN EXCLUSIVE TRANSACTION; 
... 
COMMIT TRANSACTION; 

如果你看过我联系你应该得到一个更好的主意上的区别IMMEDIATE & EXCLUSIVE事务之间的文档。

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

8

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

总之,你有交易。锁被用于实现事务。你没有原始的锁(这是一件好事,它们比你第一眼看到的要难得多)。