美文网首页
FMDB事务的底层实现

FMDB事务的底层实现

作者: 深度码农患者 | 来源:发表于2020-05-13 09:35 被阅读0次

在使用基于SQLite的数据库的时候,如果要一次性插入或更新大量数据,则适合使用事务(Transaction)

  1. 开始执行事务
    调用FMDB的开始事务方法,告诉数据库,要开始执行事务
- (BOOL)beginTransaction {
    BOOL b = [self executeUpdate:@"begin exclusive transaction"];
    if (b) {
        _isInTransaction = YES;
    }
    return b;
}
- (BOOL)beginDeferredTransaction {
    BOOL b = [self executeUpdate:@"begin deferred transaction"];
    if (b) {
        _isInTransaction = YES;
    }
    return b;
}
- (BOOL)beginImmediateTransaction {
    
    BOOL b = [self executeUpdate:@"begin immediate transaction"];
    if (b) {
        _isInTransaction = YES;
    }
    
    return b;
}
- (BOOL)beginExclusiveTransaction {
    BOOL b = [self executeUpdate:@"begin exclusive transaction"];
    if (b) {
        _isInTransaction = YES;
    }
    return b;
}

如上所示

  • FMDB开始事务的函数其实是执行开始执行事务的sql代码,根据代码执行的结果,将isInTransaction属性赋值,用于表示当前是否开启事务(则由于容易造成长期阻塞,降低并发性能)
  • 开始执行事务的函数有4个,其中:
    beginTransaction函数对应的不是标准的sqlite意义上的“BEGIN TRANSACTION”,此方法执行的是排他事务,而不是延时事务,排他事务是在开始事务的时候就上锁,延时事务是在使用的时候才会去上锁。
  • beginTransaction和beginExclusiveTransaction两个函数执行同样的逻辑。
  • 如果要使用延时事务,则需要调用beginDeferredTransaction
  • beginImmediateTransaction用于多个线程写入数据库的操作,它回去尝试获取锁,用于实现多线程写入写入数据库事务的操作。
  1. 关闭事务
    在FMDB中,有两个函数是用于关闭事务的
- (BOOL)rollback {
    BOOL b = [self executeUpdate:@"rollback transaction"];
    if (b) {
        _isInTransaction = NO;
    }
    return b;
}
- (BOOL)commit {
    BOOL b =  [self executeUpdate:@"commit transaction"];
    if (b) {
        _isInTransaction = NO;
    }
    return b;
}

如上所示,rollback方法用于回滚并结束事务,commit用于提交更新并结束事务

  1. 实现事务
    其底层实现实际上就是在执行开始事务的时候标识“已经开始事务”,此时写入数据库的操作并不会真正写入数据库,而会在commit的时候统一写入或者在rollback放弃

相关文章

  • FMDB事务的底层实现

    在使用基于SQLite的数据库的时候,如果要一次性插入或更新大量数据,则适合使用事务(Transaction) 开...

  • iOS FMDB 事务操作

    最近又用到了FMDB,对事务操作有了更深刻的认识。sqlite 本身是支持事务操作的,FMDB 作为对 sqlit...

  • Spring 事务实现分析

    1. Spring 事务简介 Spring 本身并不实现事务,Spring事务 的本质 还是 底层数据库 对事务的...

  • Spring声明事务原理及核心源码分析

    上一篇 << >> Spring声明事务底层实现原理 Spring事务是基于AOP环绕通知和异常通知实现的Spri...

  • Spring事务(一)

    Spring事务的实现原理: Spring事务底层是基于数据库事务和AOP机制的 ⾸先对于使⽤了@Transact...

  • FMDB源码解读

    FMDB提供的事务,分专用事务和延期事务 开始专用事务 开始延期事务 回滚 提交 列的类型 获取某行的某列的值

  • FMDB事务的使用

    首先,说一下事务是什么,比如说我们有一个学生表和一个学生成绩表,而且一个学生对应一个学生成绩。比如小明的成绩是10...

  • 事务底层实现及DataSourceTransactionMana

    前言   在前一篇中,我们提到了TransactionInterceptor的invoke方法会执行invokeW...

  • MySQL事务底层实现原理

    事务特性 事务特性分为:原子性 每一个事务都是不可分割的整体,要么全部成功要么全部失败;一致性 事务执行后的结果是...

  • Spring事务代理机制总结(含代码Demo)

    Spring事务代理机制总结: 1、Spring声明式事务的底层是怎么实现的? 通过Spring中的代理,那在Sp...

网友评论

      本文标题:FMDB事务的底层实现

      本文链接:https://www.haomeiwen.com/subject/cupgnhtx.html