首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL锁定与SQLite锁定

问MySQL锁定与SQLite锁定
EN

Stack Overflow用户
提问于 2015-12-29 03:36:55
回答 1查看 163关注 0票数 1

在MySQL中,我习惯这样做:

代码语言:javascript
复制
LOCK TABLE theTable WRITE;
UPDATE theTable SET theValue = 123;
UNLOCK TABLES;

如果另一个进程试图在上面的锁生效时更新theTable,它只是休眠,直到锁被移除,然后正常继续。避免了竞争条件。

我现在正尝试在SQLite3中做类似的事情。到目前为止,我已经尝试过:

代码语言:javascript
复制
BEGIN TRANSACTION;
UPDATE theTable SET theVALUE=123;
COMMIT;

但是在这种情况下,如果另一个进程试图在上述事务生效时更新theTable,它将失败,并显示“数据库已锁定”错误。

使用SQLite3,我如何避免并发进程在同时更新表的情况下失败,而是让它暂停,直到事务完成,相关的锁被解除,类似于MySQL的行为?

EN

回答 1

Stack Overflow用户

发布于 2015-12-29 04:29:09

您在MySQL中提到的行为是特定于应用程序或驱动程序的。如果您尝试从客户端运行单独的UPDATE语句,它应该会失败,并显示类似的错误。最终,由客户端应用程序决定适当的异常响应。它可以决定推迟更新,或者拒绝更新,或者等到锁被清除。

如果您希望在Sqlite中有类似的行为,则应该在while类型的循环中尝试更新,以便它将重试,直到成功为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34499614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档