mysql 四大特性

       提到mysql的隔离机制就要提到事务了,为啥要提到事务呢?事务是什么?事务就是不成功便成仁。一组数据库操作,要么都成功要么都失败,就算不都失败,也要把它变都失败。那么根据他的这个定义,特性就自然出来了,先人已经指出ACID四个原则。

  • A  原子性 就是原子操作,实际就是他的定义,成功失败的那个。
  • C 一致性 我感觉一致性就是原子性的实现方式,针对的是不全成功的操作里面要恢复成原先的未操作状态属性。
  • I  隔离性 这个针对的就是多个事务之间的关系,要是干扰就要阻塞。保证资源的共享占用不冲突。因为有很多占用的方式。
  • D 持续性 这个针对的是事务嵌套的影响,可能有的成功有的不成功,那么最终结果是什么样的。涉及到,事务的传播机制

大部分就是默认的传播机制,readonly=false ,还有很多其他的传播机制。 

只读事务是个嘛玩意

  1. 数据库隔离机制

总算讲到隔离机制了,分为4个

  • ru 读未提交 就是不管啥情况,都读出来。事务中未提交的数据也可以被读出来,那么要是数据回滚的话这些未提交的数据就是脏数据,就可能出现脏读。
  • rc 读已提交 就是只读已经提交的数据。B事务期间只能读取到A事务成功后的提交数据,所以就没有脏读,但是,第二次的读取中,数据可能就被C事务修改了,那么第二次读到的数据就可能和第一次C未提交的时候不一样了,他可能总数变了,也可能是数据变了,叫做不可重复读
  • rr 可重复读 利用了mvcc ,通过快照方式(快照又是通过当前版本号和删除版本号实现)来进行查询。啥是mvcc  然后很多都会提到一个幻读,很多的解释都说数量的不可重复读叫做幻读,或者是insert的导致的不可重复读叫做幻读。我一开始也认为解释的还行,但是到了后面,看了很多的例子和文章,发现这特么就是前后矛盾啊。第一,mvcc已经依靠了nect-key lock 就是行锁加上间隙锁,锁定了数据,这个时候你在一个事务里面怎么折腾查到的数据数目和状态都不会变的,那么,既然如此为什么会出现幻读?幻读又是个啥玩意呢?要了解这个我们就要知道mvcc带来的问题是什么--快照读。对,就是这个相当于我们读到的数据是历史数据,那么这个有什么影响呢?首先,你要是只读一下那就没啥可以挑事的,但是我们程序中肯定是要对他进行操作才会读,当事务A进行update还有insert的时候,要是事务B在他之前就插入了或者修改了,那你品品,A还能成功么?这个关键点就在于update和insert都是实时的,就好像是数据库提示你主键冲突,但是你在A中查询的时候就是没有这个主键,因为A里面是快照的历史数据。
  • ser 串行 就是一条路到黑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值