之前对ETCD中实现的MVCC了解了一点,现阶段了解MySQL也看到了这一部分,还是比较有收获的,以前写代码虽然有注意,但是没有这么深入理解过,所以有些代码现在看来,依然是有瑕疵的。

下面会讲到一致性,我这里查过了,MySQL中的一致性,和ETCD、ZK中的一致性不是同一个东西,这个知乎回答比较好,但没有说明两者的区别。当然这里是一个事务中的,一个各副本间进行线性读操作的,从实际上来看,貌似就有不同。

众所周知的事务有着四个特性(ACID):

1
2
3
4
5
ACID是衡量事务的四个特性:
原子性(Atomicity,或称不可分割性)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)

这里有一句总结,理解一致性就是:应用系统从一个正确的状态到另一个正确的状态。而ACID就是说事务能够通过AID来保证这个C的过程。C是目的,AID都是手段。


更多关于一致性的就不作讨论了,这里来看看事务中,隔离,一致性,以及锁的相互联系。

MySQL锁

以上是对MySQL实战45讲 6\7\8节中相关内容的总结。

这里主要是关注表锁的区分(表锁,MDL),行锁在事务中,什么时候出现,怎样尽量减少死锁。

另外,事务中,加锁的部分都涉及到了当前读,而且根据事务已提交,未提交,自身事务开启的时间,所能看到的数据都是不一样的。


比较推荐去看下MySQL实战45讲,确实讲的不错。