美文网首页
8.事务、游标

8.事务、游标

作者: LucXion | 来源:发表于2023-04-29 02:38 被阅读0次

应用场景1:某些业务,必须全部执行完成,不能单独执行其中的一部分,比如转账操作,A账户扣款,B账户到账必须全部执行,如果其中一个操作失败,就需要回复到最初的状态。

相关概念

  1. start transaction 或者 begin,作用是显式开启一个事务。
  2. commit:提交事务。当提交事务后,对数据库的修改是永久性的。
  3. rollback 或者 rollback to [savepoint],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
  4. savepoint:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
  5. release savepoint:删除某个保存点。
  6. set transaction,设置事务的隔离级别。
  7. set autocommit =1; //开启自动提交
  8. SET @@completion_type = 1;// 当提交了一个事务后,自动开启一个同相同隔离级别的事务,相当于执行了 COMMIT AND CHAIN。

数据库操作的异常情况分别为脏读(Dirty Read)、不可重复读(Nonrepeatable Read)和幻读(Phantom Read)。

异常

脏读:读取到了事务未提交的数据,然后事务撤回了,导致读取到的是脏数据。
不可重复读:通过事务提交数据的修改,短时间内读取同一行数据结果不同,读取到的数据的值发生了改变。
幻读:通过事务提交数据,短时间内数据的个数发生改变。读取到的数据数量发生了改变。

异常产生的原因在于:SQL 语句本身并不能保证对数据行的读取或修改是原子的,并发操作共享数据就有可能会出现异常。我们可以利用事务的原子性来避免这些问题。这也是事务的应用场景2

这就涉及到事务的隔离级别:

隔离级别越低,意味着系统吞吐量(并发程度)越大,但同时也意味着出现异常问题的可能性会更大。在实际使用过程中我们往往需要在性能和正确性上进行权衡和取舍,没有完美的解决方案,只有适合与否。

这四种隔离级别从低到高分别是:读未提交(READ UNCOMMITTED )、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和可串行化(SERIALIZABLE)。

游标

游标就是指向数据行的指针,打开游标的时候它会创建一个临时的结果集,并指向第一行,可以通过移动指针来更好的控制访问数据。
FMDB中也用到了游标,

FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM myTable"];
while ([resultSet next]) {
}

相关文章

  • 事务和游标

  • PL/SQL游标浅谈

    前言 厚积而薄发。 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现。 游标的概念 --为了处理...

  • 【图文动画详解原理系列】8.分布式事务

    【图文动画详解原理系列】8.分布式事务

  • 8.事务浅析

    事务 事务的正确执行使得数据库从一种状态转换为另一种状态 事务的特性(ACID) A atomicity ...

  • 04-事务-索引-视图-游标

    一、事务 人员信息如下:(第二列是身份证号,第三列是银行卡卡号) --刘备 420107198905064135...

  • 8.事务的详细

    1. 事务的四个特性: 原子性 A -Atomicity 一致性 C - Consistency 隔离性 I...

  • python面试学习路线-8.分布式高并发

    8.分布式高并发 1.分布式 1.分布式事务框架TX-LCN 分布式事务的两阶段提交策略 首先事务管理器通知各个数...

  • MongoDB之文档游标

    游标 查询操作返回的结果游标 游标的迭代与操作 db.collecton.find() 返回一个文档集合游标,在不...

  • sqlserver 游标

    游标更新删除当前数据 1.声明游标 2.打开游标 3.声明游标提取数据所要存放的变量 4.定位游标到哪一行 5.关...

  • 5. 中间件

    一、关系数据库 1.1.事务、索引、存储过程、游标 问题: 当数据表中A、B字段做了组合索引,那么单独使用A或单独...

网友评论

      本文标题:8.事务、游标

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