学习是一种思维,而不是具体的知识——数据库事务

事务:原子性(不可分割),隔离性,一致性,持久性

上面四个词就告诉我们事务是什么。围绕事务的特质产生了一下问题

事务的传播机制,事务的隔离级别,以及事务的实现机制

 

 

1.事务的传播机制网上是说七种,就我对传播机制的认识,传播机制的产生是由于事务互相嵌套,而产生的不同情况下的不同选择方式。

第一种:默认,当前存在事务,使用当前事务,不存在则自己创建(最乖)

第二种:当前存在事务,使用当前事务,不存在则不使用(最随便)

第三种:使用当前事务,不存在则报错(最刻薄)

第四种:新建事务,如果存在当前事务,当前事务挂起(最独立)

第五种: 非事务运行,如果存在当前事务,当前事务挂起(最执着)

第六种:非事务运行,如果当前存在事务,则报错(最老实)

第七种:如果当前存在事务,则在嵌套事务中运行,如果不存在则和第一种一致。(最灵活)3.0以上才有

以上其中涵盖了。嵌套方式 3种使用当前事务,3种不使用当前事务,最后一种比较特殊,真正的子事务。

 

2.第二个问题是事务之间的隔离级别,一共四种,问题的产生是事务并行产生的,意思就是多个线程,同时执行事务而造成数据的不同程度错误。实际问题如下,根据深度从小到大排序,脏读,不可重复读,幻读。不可重复读和幻读的最大区别是,不可重复读是修改造成的,而幻读是增加造成的。因为造成的原因不同所以为了解决相应的问题,需要牺牲更大的成本。在mysql的默认级别  可重复读  ,这种级别并没有解决幻读。原因如以上提到的,代价不同,解决不可重复读,锁行锁就可以,而幻读需要锁住整张表。效率变的非常低下。

有次带来的一个问题。在事务内如果涉及到相关整表数据的合计判断等操作,要考虑到本操作由于数据库级别的原因,而产生幻读的现象。

 

3。第三的问题便是这锁的机理,java代码中有lock和Synchronize(悲观锁),数据库锁有二种乐观和悲观。各有个的优势,其中很多东西网上都用,这里不做述说。悲观可以避免脏读而乐观效率更高。

 

 

以上问题对事物从,并行发生(隔离级别),串行发生(传播机理),事物核心原理锁的说明。

学习是一种思维并不是具体的知识

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值