浅谈对事务(transaction)的理解

我们以转账为例。例如张三家的狗生病了,但是张三现在账户上只有20块钱,而给狗看病需要50块钱。那么张三给关系不错的李四打电话了,要李四转账给他30块钱(李四现在账户上有100块钱)。这个转账的过程就需要遵循数据库的一些特性。

原子性(Automicity)

在现实世界中转账是个不可分割的操作。要么转账成功,要么没有转,不存在说转一半的情况。我们把这种要么不做要么全做的规则称之为原子性。

隔离性(Isolation)

在张三向李四转账的操作分别设为t1,t2.在现实环境中t1,t2是没有关系的,先执行t1在执行t2或者是先执行t2在执行t1都是一样的。

但是在数据库中t1,t2的操作是交替执行的。有可能出现在写完t1中李四的账户余额后,t2操作在读取李四账户的值时,李四账户的余额由100元变为了70元。那李四最后的账户余额则变为了40元,这样就造成了转账的混乱。所以在数据库中不仅要保证操作以原子性的方式完成操作,而且还要保证其他的状态转换不收本次状态转换的影响,这个规则被称之为隔离性。

一致性(Consistency)

在转账过程中参与转账的账户总的金额是不变的,这个规则就称之为一致性。数据库中某些操作的原子性和隔离性都是保证一致性的一种手段,但是也不是说原子性和隔离性的操作就一定满足一致性,比如说举个极端的例子,张三向李四借了200元。他满足了原子性和隔离性的操作,但是李四自己本身的账户却只有100块钱。综上所述,一致性的操作一定是满足原子性和隔离性的,但是原子性和隔离性的操作并不一定满足一致性。

持久性(Durability)

在一个转态转换完成后,这个操作的结果将永久的保留在数据库的表中。这个规则被称之为持久性。

事务的概念:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章