数据库的四大特性以及事务的隔离级别,七种传播行为

数据库的四大特性:

1.原子性

2.一致性

3.隔离性

4.持久性

其中不考虑事务的隔离性会出现下面几种情况:

(1)脏读

在一个事务处理过程里读取了另一个未提交的事务中的数据。

当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。

(2)不可重复读

读取了已提交的事务。事务A读取数据后,事务执行更新操作,使A无法再现前一次读取结果。不可重复读包括三种情况:

A)事务A读取某一数据后,事务B对其作了修改,当事务A再次读取该事物时,得到与前一次不同的值。

B)事务A按一定条件从数据库中读取某数据记录后,事务B删除了其中部分记录,当A再次按相同条件读取数据时,发现某些记录神秘的消失了。

C)事务A按一定条件从数据库中读取某数据记录后,事务B插入了一些记录,当A再次按相同条件读取数据时,发现、多了一些记录。

后两种不可重复读,也称为幻影(Phantom Row)现象。

(3)丢失修改

两个事物A与B,读入同一数据并修改,B提交的结果破坏了A提交的结果,导致A的修改丢失。

(4)幻读(由于设置事务隔离级别为:可重复读,而导致)

同一事务中,虽然多次执行相同的查询,查询结果是相同的。但后面的查询结果已经与DB中真正的数据不一致了。在同一事务中多次读取到的数据,不是真实的DB中当前数据,是虚的数据,就像是DB中数据的幻象。

 

事务的隔离级别:

1.Serializable (串行化)可避免脏读、不可重复读、幻读。

2.Repeatable read (可重复读)可避免脏读、不可重复读。

3.Read committed (读已提交)可避免脏读。

4.Read uncommitted (读未提交)都避免不了

MySQL默认的方式的:可重复读。

 

七种传播行为:

1.PROPAGATION_REQUIRED:(支持事务)如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

2.PROPAGATION_SUPPORTS:(支持事务)支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。

3.PROPAGATION_MANDATORY:(支持事务)支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

4.PROPAGATION_REQUIRES_NEW:(支持事务)创建新事务,无论当前存不存在事务,都创建新事务。

5.PROPAGATION_NOT_SUPPORTED:(不支持事务)以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6.PROPAGATION_NEVER:(不支持事务)以非事务方式执行,如果当前存在事务,则抛出异常。

7.PROPAGATION_NESTED:(不支持事务)如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值