赞
踩
首先MySQL事务有四大特性,我们由这四大特性反推就可得知MySQL是如何保证事务的,也就是说保证四大特性就能保证MySQL的事务
原子性是基于undolog来实现的。整个语句要么执行,要么不执行。一个原子性的事务 如果中间失败了,那么前面已经执行的怎么办?–回滚,利用undolog回滚执行一半的数据,以此保证事务的原子性。
一致性应该最后来说,一致性是靠其他三条特性共同保证的。但一致性很多人可能理解比较不清楚,在这里我举一个例子:
假设银行的数据库中A有100块B有200块。一共有300块
A给B转账五十块后 A有50 块 B有250块,那么一共还是300块,这就叫一致性。
如果A给B转账后 两人总和不是300块了 ,那么就违反了一致性
一致性这里还应注意的是 CPA理论中的一致性,和数据库中的一致性并不相同。CAP理论中一致性指在分布式系统中,不同服务器的数据一直即相同,和数据库中的一致性没有一毛钱关系。
在默认隔离级别可重复读下:隔离性是基于MVCC 即 并发版本控制实现的,“事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。” 如何理解呢,MVCC在事务运行时 会基于read view选取一个合适的的版本,而不是实时的最新的数据库版本。MVCC出现在可重复读隔离级别上,能有效的保证脏读、不可重复读的问题。
其他几个隔离级别应该很好理解了吧:读未提交、读已提交、串行化。
MySQL的持久性主要是靠redolog来完成的。MySQL虽说是基于硬盘存储的,但它并不是直接对硬盘进行操作,而是会将对应的数据页读如内容buffer区进行修改,同时修改完成后也不会立即写回进磁盘,如果发生宕机,那么数据将不可恢复。这时就要靠我们的redolog了,redolog会在服务器重启时将未持久化的数据再次持久化。
首先binlong是属于MySQLserver层的 , 而undolog redolong都是在执行器一层产生的。
binlong的记录方式的Redis的RDB和AOF非常类似,所以说技术是相同的吗。binlog有两种记录方法分别是只记录结果和记录全部的sql语句,同时还提供了mixed即两种全部都启用。
那binlog有什么用? 在mysql建立集群时,他们就是通过binlog进行同步的(这和Redis又有异曲同工之妙),同时部分业务也可以利用订阅binlog来实现特定功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。