在将行插入或更新到表中之前,我没有找到显式的sqlite锁定命令。 sqlite是否自己处理锁定机制? http://sqlite.org/lockingv3.html中描述的寻呼机模块处理锁定机制。但我不确定用户是否可以使用任何命令来显式锁定表。请指教。
由于
答案 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
。
简而言之,你有交易。锁用于实施事务。你没有原始锁(这是一件好事;它们比你从第一眼就想到的那样难以正确)。