数据库事务总结

1.数据库事务

什么是事务?事务指的是一系列不可分割的执行单元。

 

2.事务的4大特性ACID

原子性(Atomicity),一致性(consistency),隔离性(Isolation),持久性(Durability)

A(Atomicity)原子性:

事务是一个不可分割的执行原子单元。所有的操作只有都执行成功,整个事务才会提交。事务中的任何一个操作失败,已经执行到的任何操作都必须撤销,让数据库回到初始的状态。

C(Consistency)一致性:

事务从一个一致性的状态变换到另外一个一致性的状态。一致性指的是对数据的约束性。以A和B转帐为例子,A和B都要100元,这时A给B转100元,A = 0,B =200 ,此时A和B的总额仍然为200.

不管操作如何,A和B的存款总额不变。

I(Isolation)隔离性:

一个事务的执行不会被其他事务干扰。

D(Durability) 持久性:

事务一旦被提交,对数据库的改变是永久性的。

 

3.并发一致性问题

多个事务共同访问同一个资源。

事务并发可能会导致的问题:

(1)第一类丢失更新:撤销一个事务时把其他事务已经提交的数据回滚掉;

(2)第二类丢失更新:提交一个事务时将其他事务已经提交的数据覆盖掉;

(3)脏读:读到了其他事务未提交的更新数据;

(4)幻读:一次事务执行两次相同的查询,读到了不同的记录数

(5)不可重复读:一次事务执行两次相同的查询,读到的结果不一样

 

4.隔离级别

隔离级别 脏读 不可重复读 幻读
读取未提交  √   √   √
读取提交  ×  √  √
可重复读  ×  ×  √
序列化  ×  ×  ×

当隔离级别是读取未提交时,一个事务可以读到另一个事务为提交的数据,脏读,幻读和不可重复读都有可能出现;

当隔离级别是读取提交时,两次读取到的数据都是已经提交的数据,但是一个事务在执行两次查询的中间,由于并发的原因,另外一个事务对这个数据进行了增加或者修改,则会造成幻读和不可重复读。

举例说明:

双十一进行抢购的时候,会有很多人同时购买商品,当你第一次查询商品种类的时候,可能有鞋子,包等等.但是隔了一秒之后,再次查询,包已经被抢购完,此时查询的商品种类和之前的数目不一样,这就是一种幻读。

同样的,当你下单买一种商品时,由于并发性,很多人同时抢购该种商品,两次查询得到的库存数不同,此时就是不可重复读。

当隔离级别是序列化时,所有的事务排队执行,效率非常差。

 

posted @ 2020-06-09 15:30  luckyzoe  阅读(177)  评论(0)    收藏  举报