java 事务详解

一、什么是事务
事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。
一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态。
隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。
持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
运行嵌入式SQL应用程序或脚本,在可执行SQL语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit)的过程(在这种情况下,发出的每个单独的SQL语句被看做单个事务,它一执行就被隐式地提交了)。
在大多数情况下,通过执行COMMIT或ROLLBACK语句来终止事务。当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了-- 即它们被写到磁盘。当执行ROLLBACK语句时,自从事务启动以来对数据库所做的一切更改都被撤销,并且数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。
一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是须要用户或应用程序来确保每个事务中执行的SQL操作序列始终会导致一致的数据库。
二、数据库系统支持两种事务模式:
自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。
注:MySQL中数据库表分为3种类型:INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。
三、对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:
四、隔离级别
当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以有优先考虑把数据库系统的隔离级别设为Read Commited,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:
A.悲观锁:指在应用程序中显示的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。
B.乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。
五、悲观锁有两种实现方式。
A.在应用程序中显示指定采用数据库系统的独占所来锁定数据资源。SQL语句:select ... for update,在hibernate中使用get,load时如session.get(Account.class,new Long(1),LockMode,UPGRADE)
B.在数据库表中增加一个表明记录状态的LOCK字段,当它取值为“Y”时,表示该记录已经被某个事务锁定,如果为“N”,表明该记录处于空闲状态,事务可以访问它。增加锁标记字段就可以实现。
利用Hibernate的版本控制来实现乐观锁
乐观锁是由程序提供的一种机制,这种机制既能保证多个事务并发访问数据,又能防止第二类丢失更新问题。
在应用程序中可以利用Hibernate提供的版本控制功能来视线乐观锁,OR映射文件中的<version>元素和<timestamp>都具有版本控制的功能,一般推荐采用<version>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 事务
# 事务详解
# 事务理解
# Java事务管理学习之JDBC详解
# Java事务的个人理解小结
# Java事务管理学习之Hibernate详解
# 应用程序
# 这类
# 第二类
# 已有
# 过程中
# 数据库系统
# 所做
# 就会
# 读到
# 多个
# 可以看到
# 以下几类
# 新和
# 它会
# 转换成
# 可能出现
# 数据库中
# 可以分为
# 都是
# 这是
相关文章:
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
制作网站外包平台,自动化接单网站有哪些?
如何快速搭建二级域名独立网站?
如何续费美橙建站之星域名及服务?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
网站制作壁纸教程视频,电脑壁纸网站?
如何挑选高效建站主机与优质域名?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
python的本地网站制作,如何创建本地站点?
网站微信制作软件,如何制作微信链接?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在云虚拟主机上快速搭建个人网站?
高端云建站费用究竟需要多少预算?
如何在Golang中指定模块版本_使用go.mod控制版本号
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
html制作网站的步骤有哪些,iapp如何添加网页?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
微信推文制作网站有哪些,怎么做微信推文,急?
建站之星如何快速生成多端适配网站?
5种Android数据存储方式汇总
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站之星如何防范黑客攻击与数据泄露?
如何获取上海专业网站定制建站电话?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星后台管理如何实现高效配置?
建站之星3.0如何解决常见操作问题?
如何选择域名并搭建高效网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何用低价快速搭建高质量网站?
建站之星ASP如何实现CMS高效搭建与安全管理?
建站org新手必看:2024最新搭建流程与模板选择技巧
制作网站的模板软件,网站怎么建设?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
建站之星安装提示数据库无法连接如何解决?
建站之星如何配置系统实现高效建站?
如何快速查询域名建站关键信息?
如何在宝塔面板中创建新站点?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何快速查询网址的建站时间与历史轨迹?
深入理解Android中的xmlns:tools属性
建站之星云端配置指南:模板选择与SEO优化一键生成
如何通过虚拟机搭建网站?详细步骤解析
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
c# 在ASP.NET Core中管理和取消后台任务
高端建站如何打造兼具美学与转化的品牌官网?
建站之星展会模板:智能建站与自助搭建高效解决方案
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
网站制作报价单模板图片,小松挖机官方网站报价?
网站网页制作专业公司,怎样制作自己的网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。