事务的相关特性和隔离级别

事务相关

事务的四大特性(ACID)

● 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
● 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。换一种方式理解就是:事务按照预期生效,数据的状态是预期的状态。
● 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
● 持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务的的隔离级别

● 读未提交(Read uncommitted)
如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据,该事务隔离级别通过“排他写锁”,但不排他读线程实现。这样避免了更新丢失,却有可能出现脏读,也就是说事务B读取到了A未提交的数据。解决更新丢失,但还是会出现脏读。
● 读已提交(Read committed)
如果一个读事务(线程),则允许其他数据写。如果是写事务将会禁止其他事务访问该行数据,该事务隔离界别避免了脏读,**但可能会出现不可重复读。**事务A事先读取到数据,事务B紧接着更新了数据,并提交了事务,而事务A再次读取数据时,数据已经发生了变化。解决了更新丢失、脏读、,但出现不可重复读的问题。
● 可重复读(Repeatable read)Mysql的默认隔离级别
可重复读取是指在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能访问该数据(包括了读写),这样就可以在同一个事务内两次读到的数据是一样的,因此称为是可重复读隔离级别,读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务(包括了读写),这样避免了不可重复读和脏读,但是有时可能会出现幻读。(读取数据的事务)可以通过“共享读镜”和“排他写锁”实现。解决了更新丢失、脏读、不可重复读、但是还会出现幻读。
● 串行化(serializable)
提供严格的事务隔离级别,要求事务序列化执行,事务只能一个接一个执行,但不能并发执行,如果仅仅通过“行锁”是无法实现序列化的,必须通过其他机制(锁表的方式)保证新插入的数据不会被执行查询的事务访问到。串行化是最高的事务隔离级别,同样的也要消耗更高的代价。解决了更新丢失、脏读、不可重复度、幻读。

redis 事务

redis 的事务是一组命令的集合,一个事务的所有命令都会被序列化,执行的过程中按照顺序执行,并且其它会话提交的命令不会插入到事务执行的命令序列中。redis的事务就是一次性,顺序性,排他性的执行一个队列中的一系列命令。
redis 的事务没有隔离级别的概念,事务中的命令在执行之前会被放入队列缓存中,并不会被实际执行,也就不存在事务内的查询要看到事务内的更新,事务外的查询看不到的情况。
redis 中一个事务经历的三个阶段:开始事务、命令入队、执行事务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值