根据维基百科的定义,一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法;2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。简单来讲,事务的作用至少有两个:保证数据一致性,以及对数据进行隔离。这么说大家可能还不太好理解,我们还是举个例子说明一下吧。
我们以A向B转账100块钱为例,在一笔转账操作中,至少必须包含2个操作:
如果在转账的过程中不使用事务,那么有可能会出现在将A的账户扣除100块钱之后,发生了不可预知的异常(比方说服务器宕机了),导致没来得及将B的账户增加100块钱,如此一来,数据库就产生了数据不一致的情况,即A的账户扣了100块钱,但是B的账户并没有相应地增加100块钱,也就是说有100块钱“不翼而飞”了。而如果将这2个操作放在一个事务里执行的话,由于事务中的操作要么全部执行,要么全部不执行,所以可以保证数据一致性。这就是在数据一致性要求比较高的场景下使用事务的好处。
事务的特性主要有4个:原子性,一致性,隔离性与持久性,也叫做ACID。
前文说到,事务具有隔离性,而且通常来讲,不同事务之间是不可见的,然而现实中的事务隔离性并不都是不可见的,实际上,SQL标准定义了4种事务隔离级别:读未提交,读已提交,可重复读,串行化,下文将逐一讲解。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。