事务和数据库隔离级别

事务隔离级别

事务隔离级别由弱到强分别是:READ_UNCOMMITTED(未提交读)、READ_COMMITTED(提交读)、REPEATABLE_READ(重复读)和SERIALIZABLE(串行读)。
隔离界别脏读不可重复读幻读
READ_UNCOMMITTED允许允许允许
READ_COMMITTED不允允许允许
REPEATABLE_READ不允不允允许
SERIALIZABLE不允不允不允许
  • 脏读:
    脏读指的是一个事务允许读取其他正在运行的事务还没有提交的数据,这种情况的发生主要因为没有加锁。

  • 不可重复读:
    是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)
    例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
    要达到允许可重复读,必须让当前事务保持一个读共享锁。

  • 幻读:
    幻读指的是事务不是串行发生时发生的一种现象,是事务A读取了事务B已提交的新增数据。例如第一个事务对一个表的所有数据进行修改,同时第二个事务向表中插入一条新数据。那么操作第一个事务的用户就发现表中还有没有修改的数据行,就像发生了幻觉一样。解决幻读的方法是增加范围锁或者表锁。

MySQL的默认事务隔离级别是REPEATABLE_READ,ORACLE、SQL Server、DB2和PostgreSQL的默认事务隔离级别是READ_COMMITED

事务的特性(ACID特性)

  • 原子性(Atomicity)
    事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
  • 一致性(Consistency)
    事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(Isolation)
    一个事务的执行不能被其他事务干扰。
  • 持续性/永久性(Durability)
    一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

流程2

流程2和流程1的区别是request的更新操作是在返回3之后,返回3是workflow调用request服务进行更新操作,此刻更完之后就会提交,之后request中又进行一次更新操作。
能成功的原因是,workflow调用request服务进行更新操作的事务和request服务自己更新操作的事务不是一个,不存在等待。

喜欢请支持,欢迎讨论^^

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值