前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WEB 开发事务管理 原

WEB 开发事务管理 原

作者头像
北漂的我
发布2019-05-29 11:42:42
4300
发布2019-05-29 11:42:42
举报
文章被收录于专栏:北漂的我北漂的我

为什么80%的码农都做不了架构师?>>>

事务处理

事务的4个基本特征

1.Atomic(原子性),事务中包含的操作被看做是一个整体的业务单元,这个业务单元中的操作要么全部成功,要么全部失败,不会出现部分成功,部分失败的场景。

2.Consistency(一致性),事务在完成时,必须使所有的数据都保持一致的状态,在数据库中所有的修改都基于事务,保证了数据的完成性。

3.Isocation(隔离性),多个应用程序线程同时访问同一个数据,在不同的事务中被访问,这样就会产生丢失更新。为了在不同程度上压制丢失更新的产生,数据库定义了隔离级别的概念。因为互联网应用是高并发场景,所以隔离性是要重点掌握的内容。

4.Durability(持久性),事务结束后,所有的数据都固化到一个地方,比如保存到磁盘或数据库中,即使断电重启后也能再次提供给程序访问。

数据库的隔离级别

1.未提交读(read uncommitted),允许一个事务读取另一个事务没有提交的数据,未提交读是一种危险的隔离级别,所以一般在实际的开发中用的很少,优点是并发能力高,适合那些对数据的一致性没有要求而追求高并发的场景。最大的坏处就是会出现脏读。为了克服脏读,提出了读写提交的隔离级别。

2.读写提交(read committed),是指一个事务只能读取另外一个事务已经提交的数据,不能读取未提交的数据,从而克服脏读的问题。但是读写提交的坏处就是出现不可重复读,为了克服不可重复读,提出了可重复读的隔离级别。

3.可重复读(repeatable read),为了克服在读写提交的时候出现的不可重复读问题,因为在读写提交的时候,可能出现一些值的变化,影响当前事务的执行。但是假设商品正在交易,后台有人在进行查询分析和打印的业务,这时就会出现一个新的问题就是幻读

4.串行化(Serializable),是数据库最高的隔离级别,它会要求所有的 Sql 都按照顺序执行,这样就可以克服脏读、不可重复读、幻读的问题,能够完全保证数据的一致性,但是性能是最差的。

事务的传播行为(最常用的:REQUIRED、REQUIRES_NEW、NESTED)

1.REQUIRED默认的传播行为,如果当前存在事务,就沿用当前的事务,如果当前不存在事务,就创建一个事务运行业务)

2.SUPPORTS(支持事务,如果当前存在事务,就沿用当前事务,如果当前不存在事务,就继续采用无事务方式运行)

3.MANDATORY(必须使用事务,如果当前没有事务,就抛出异常,如果当前存在事务,就沿用当前事务)

4.REQUIRES_NEW(无论当前是否存在事务,都会创建一个新事务运行业务,新的事务就拥有独立的锁和隔离级别等特性,与当前事务相互独立)

5.NOT_SUPPORTED(不支持事务,当前存在事务时,将挂起事务,运行方法)

6.NEVER(不支持事务,如果当前存在事务,就抛出异常,否则继续使用无事务机制运行)

7.NESTED嵌套事务,如果被父方法调用,子方法发生异常,在父方法中 try catch 子方法,那么只回滚子方法,不回滚父方法已经执行的,后面的语句也可以继续执行)

同一个 Service 类中的方法的自调用,会引起子方法的 @Transactional 失效!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档