首页 > 代码库 > 什么是事务

什么是事务

| 版权声明:本文为博主原创文章,未经博主允许不得转载。

前言:

在学习事务确实有不少弯路,那么今天笔者就用例子讲解一下事务,让初学者少走一些弯路。

 

【回顾事务】问:什么是事务?

      答:用专业术语来说事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。

  举个银行转账的例子:

  ①张三账上有2000元,李四账号也有2000元。张三要向李四转账1000元,正常来说应该是张三账上-1000元,李四账上+1000元。最后张三账上还剩1000元,李四账上3000元。这样就完成了一个转账的操作。

  ②但这组操作不应该出现的情况就是:张三转了1000元之后断电了,或者出现其他的特殊情况。这样就不应该出现张三转出1000元,而李四账上没收到1000元。所以在这种情况下的一组操作我们可以用一个事务来管理。如果这组操作加入了事务管理里面,那么这组操作就必须一起成功,或者一起失败。一起成功就是张三转出1000元,还剩1000元,李四收到1000元账上3000元。如下图:

技术分享

以上就是事务的概念:这组操作要么全部成功,要么全部失败。

 

在事务当中有一些相关的特性:

事务的特性:

      1.原子性(是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生)

      2.一致性(指的是事务执行前后数据的完整性必须保持一致,举个例子:张三转账前是2000元,李四2000元,总数是4000元,转账后张三账上1000元,李四3000元,总数也是4000元。所以说不能出现张三转出去,李四没收到这种情况。)

      3.隔离性(多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。举个例子:假设有两个事务同时操作数据库,事务1在修改张三的的记录,事务2同时也在修改张三的记录。那么就会出现①事务重复修改,②一开始事务修改后的记录被第二个事务所覆盖)如下图:

                          技术分享

 

        问:怎么解决这个问题(①重复修改 /②被覆盖)呢? 答:数据库有相应的隔离级别,我们可以通过设置这种隔离级别来解决这个问题

      4.持久性(一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响)

什么是事务