今天打算说一说事务管理,读者可能了解也有可能不了解,其实很简单(大牛请自行绕过)。本来想引用个成语的啥的来描述事务的特点,但是搜肠刮肚也没有发现合适的,于是就找了下面几组成语来描述事务性。其实在官方文档中对于事务的描述也是分四个方面来说的。这里算是用自己的理解解释一下罢了。
第一对词语是:“开弓没有回头箭”和“前功尽弃”(功亏一篑?功败垂成?)
这一对词语结合起来看就是事务的原子性,就是我们平时说的要做就做完,要不做就一点儿也不要做。其中前面的做完就是说明这个事务已经成功了,后面说的是在执行失败的时候需要回滚事务,也就是说保持原样不变(请参考接下来的特性——一致性)。
第二对词语是:“守口如瓶”和“表里如一”
这对词语结合起来看就是事务的一致性,意思就是一个事务结束后那么数据将是有效的,不是不可以理解的。话句话说这个特性是上一个特性的补充,做了一半不想做了,那对不起你得给我恢复原样,不能一部分数据更改了,另一部分没有更改。
第三对词语是:“事不关己高高挂起”和“各扫自家门前雪,莫管他人瓦上霜”
这对词语翻译成白话文就是“管我屁事”,这里表述了事务的另一个特性——隔离性。也就是说不同的事务之间是没有关系的,当事务提交之后其他的事务才能看到更改,否则对于外部的事务来说好似一个黑盒子,不知道里面在干什么。
第四对词语是:“尘埃落定”和“生米煮成熟饭”
这对词语的意思就是一切都已经完成,别想后悔了。映射到事务的特性里面就是持久性。一旦事务完成之后那么就意味着在事务中做出的更改将继续保持,当然后面另一个事务进行更改就是另一码事了。
官方文档上说满足以上四个特点的事务称之为ACID事务(其中A:atomicity,C:consistency,I:isolation,D:durability)。但是在满足ACID属性的时候人们考虑到性能问题会采取灵活的策略。比如数据的隔离级别问题,人们可以规定比之前更加宽松或者更加严格的规定。(具体可参照维基百科“事务隔离”词条。)人们这样规定是为了提升性能,或者是为了得到更加一致性的数据。