还在学Hibernate,后续一大堆概念刚接触需要理解。觉得-——事务——这个概念不是很好理解,所以发上来记录一下。

首先说点千篇一律的东西。概念和特性都是随处可见的,无论哪里都很容易找到,关键是你如何去理解它。

概念:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

特性:事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
————————————————————————————————————————————————————————————————————————
为什么引入“事务”这个概念?
--->就像所有的文学,来自与生活,却又高于生活一样。事务的概念同样的来自于生活,引入“事务”肯定是为了解决某种问题,不然,谁愿意干这么无聊的事情呢?
现实里好比银行转账一样,当从一个帐户转出一部分钱之后,就必须在另一个帐户中存入相同数目的钱,若是转出钱之后,事务中止了,没有在另一个帐户中存钱,那么钱就不翼而飞了(事务的原子性),这事肯定是搁在谁身上都是不干的事情。而在软件中由于“事务”与数据库相关,在这个数字化时代,一切即数字,当然包括钱了。这么重要的东西一定得有所保障,既然“事务”能为它提供保障,那么引入它也是理所当然的。
 
如何理解事务的原子性?
--->原子性在最初在物理上解释为:不可再分割的。
可是在这里却感觉与物理上的理解有所不同,因为它把你随便一个事务都划分为原子性的,且它的原子性更偏向于结果的唯一性:要么成功,要么失败。
我们可知在Hibernate中由session.beginTransaction();语句我们可以自定义一个事务,而用session.endtransaction()来告诉该事务的结束,那么至于这两者之间的操作当然可以由你自己定义了。这个事务可大可小但是结果只有一个。
 
事务是否可以什么都不做?还是说一定要与数据库联系起来?
--->由事务的定义:“事务是访问并可能更新数据库中各种数据项的一个程序执行单元"可知,事务首先要实现对数据库的访问。这样来看,事务是不可能什么都不做的。因此事务的存在确实与数据库相关。
 
事务的一致性?
--->这个问题不是很好理解。一致性与原子性关系密切。
假如有一个产品表和一个产品明细表,是父子关系,当我们添加产品表的时候,一定要添加产品明细表的资料,如果我们只是添加了产品表没有添加产品明细,这样就会是数据不一致,混乱,这里我们就要用到事务了。
 
事务的隔离性?
--->这个比较好理解,若学过多线程的话就能理解多线程为什么要引入锁机制了。而同样为了解决事务的并发问题而引入的事务的隔离级别,数据库和应用程序都可以设置隔离级别。
 
事务的持久性?
--->假若你的事务是去银行存钱,那么你总不希望你刚刚提交完存钱请求之后(即事务已提交成功),由于突然的故障而让你的金钱“失联”吧!这就是事务的持久性。
这里有个问题,如果我的“事务”过程只是存钱,那么,根据以上的栗子,存钱完后——即事务已提交成功——那么是不是意味着事务已经完成了呢?那么后续的动作是不是就不是事务的范围之内了呢?存钱的事务完成,动作就传递给了数据库,那么于数据库的动作不再我刚刚那个“事务”当中呀!确实有待多了解。
 
事务与线程的同和异?
 
 
 
 
 

java事务理解的更多相关文章

  1. 转!!java事务的处理

    java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前 ...

  2. 深入Java事务的原理与应用

    一.什么是JAVA事务    通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 ( ...

  3. java事务的处理

    java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务. 如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先 ...

  4. Effective Java通俗理解(下)

    Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ...

  5. java事务 深入Java事务的原理与应用

    一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

  6. java事务(三)

    java事务(三)——自己实现分布式事务 在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在J ...

  7. java事务(一)

    Java中事务处理的基本方法与原理,包含以下文章: (一)Java事务处理的基本问题 (二)失败的案例 (三)丑陋的案例 (四)成功的案例(自己实现一个线程安全的TransactionManager) ...

  8. java事务(三)——自己实现分布式事务

    在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在JAVA中是使用JTA(Java Trans ...

  9. 温故而知新java事务

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

随机推荐

  1. iOS10 升级兼容必备参考

    最近提交审核不通过,再iOS10上运行崩溃 .然后需要处理崩溃的问题,晚上找了一下,整理收集起来. 方便后续查看使用. 以下参考链接特别有用: http://blog.csdn.net/gbking/ ...

  2. SAP ECC CO 配置

    SAP ECC 6.0 Configuration Document Controlling (CO) Table of Content TOC \o \h \z 1. Enterprise Stru ...

  3. android自定义viewgroup之我也玩瀑布流

    先看效果图吧, 继上一篇<android自定义viewgroup实现等分格子布局>中实现的布局效果,这里稍微有些区别,每个格子的高度不规则,就是传说的瀑布流布局,一般实现这种效果,要么用第 ...

  4. 牢骚与javascript中的this

    最近在看关于拖延症的一本书<拖拉一点也无妨>,后面得出结论是自己写博客大部分处于两种状态,心情很好和心情很不好的时候.因为正常状态下感觉写博客吧,是件很麻烦的事情,不如去看看电影看看漫画啥 ...

  5. apache服务器配置Net的实践

    前置: 在xp系统中,打补丁之类或啥子操作引起或多或少的问题,最终导致iis不能使用: 不想装系统...忍着... 最近突发事件导致,需要摸一下apache服务器处理,好吧,那就搜索下吧..... 目 ...

  6. DMSFrame 之简单用法(一)

    1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了.使用上有些地方还是比较方便的.DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护. ...

  7. SQL 解锁表

    http://www.cnblogs.com/chjf2008/archive/2012/11/21/2780787.html 最主要是找到最近使用工具或者应用连接过数据库的进程,关掉它就可以了.

  8. 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的

    前言 跟我一起顺藤摸瓜剖析 Artech 老师的 MiniMVC 是如何运行的,了解它,我们就大体了解 ASP.NET MVC 是如何运行的了.既然是“顺藤摸瓜”,那我们就按照 ASP.NET 的执行 ...

  9. IT痴汉的工作现状24-Just for fun

    早在大学一开始我进行Linux的学习了,那时大家都跟Windows Xp玩的火热,而我从来就不走寻常路,在XP上安装了VMware虚拟机搞起了Linux的探索.这简直让我眼界大开,每天都和那么多的国外 ...

  10. get新技能: 如何设置元素高度与宽度成特定比例。宽度改变,高度自动按比例改变。 例如设置宽高比16:9。

    设置宽高比在很多时候是有用的. 下面的栗子,我们设置一个容器的宽高比为16:9 //HTML代码片段 <div class="container"> <div c ...