Android sqlite 事务级别,Android:SQLite(ORMLite)事务隔离级别

SQLite有5个不同的锁级别 –

http://www.sqlite.org/lockingv3.html:

解锁,共享,保留,待定,独占.

这个问题的重要锁定是共享锁:

“SHARED – The database may be read but not written. Any number of

processes can hold SHARED locks at the same time, hence there can be

many simultaneous readers. But no other thread or process is allowed

to write to the database file while one or more SHARED locks are

active.”

锁是表级的(因此在DB中使用单行执行某些操作时 – 整个表都被锁定).

因此,在选择数据时,不允许其他进程更改数据.

读取数据的锁定步骤为:UNLOCKED→PENDING→SHARED→UNLOCKED(您可以在事务中运行选择).因此,您选择某些内容并且某人将更改数据的情况不会发生.

您的问题是如果您要更新数据库并在同一个表上执行选择会发生什么.在自动提交模式下,写入/更新的锁定机制是:

已解锁→待处理→共享→已保留→待处理→已排除→已解锁.

在Exclusive锁中,没有新的读者(连接)可以连接到数据库.一次只能存在一个EXCLUSIVE锁.然后SQLite将等待,直到读取连接的所有其他PENDING锁被释放,并将阻止任何新的.此时,它将开始写入数据.

所以,我的答案是 – 只要更新过程没有完成,你的其他过程当然会获得旧数据.确保在事务中运行更新,以便不会发生数据不一致. SQLite符合ACID标准,因此不应发生部分更新和包含数据的情况.

一本关于此的好书是“SQLite的权威指南”,特别是“交易”一章.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值