事务

什么是事务?事务通俗的讲就是要做的事,在计算机术语中一般指访问或更新数据库中数据的一个工作单元。说起事务,那么就要提到事务的ACID特性,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。可是为什么说起事务就要提到这四个特性,这四个特性是一个事务必须遵守的标准呢还是对事务的一个期望目标呢,对于这个疑问,我有自己的理解。

事务通俗的将是要做的事,那么事务的特性就类似于操作规范,按照操作规范来做事就可以尽量避免发生措手不及的问题,最终把事情做好。如果把要做的事拆解一下,通常的步骤就是准备,定好目标,执行,获得结果。对于计算机事务来说,执行一个工作单元,正确完成对数据库的访问或更新,使数据库从一种状态转换成另一种状态,这个执行过程就是计算机事务。如何从事务开始到结束来保证它的正确性,实现最终目标,这需要靠每个步骤上的正确执行来保证得到最后的正确结果。为了保证每个步骤的正确执行,就有了这四个特性。

事务特性

为了说明事务的特性,举个窗口购买火车票的例子。首先简单的分析一下,在购买火车票之前我们需要准备好身份证件和现金,最终结果是我们支付现金并且获得火车票。但是如果购票业务没做好,会出现那些情况呢。下面大致列举一下:

1、乘客得到了火车票却没有给售票员付钱。

2、在办理购票业务的时候提示票已售完。

如果现实中真的出现了这些问题,那是谁都不愿意的看到的。因此为了保证购票业务的正确执行,必须把付钱和得到火车票看成一个整体,要么付钱并得到火车票,要么退钱结束购票。

而且在购票的过程中,便锁定客户的票,不能让它被其他窗口买走。

例子是这样一个简单的例子,但用来说明事务的特性却是足够了。

  • 原子性

原子性即不可分割性,含义是一个事务必须把它产生的所有更改作为一个单独的工作单元进行提交或者回滚。无论有多少变动都将作为一个整体来处理。怎么来保证事务的原子性首先在事务开始之前对事务进行拆解,分析哪些动作是必须同时成功,同时失败的,把这些绑在一起的动作看成一个完整的工作单元,这些动作要步调一致。这其实也就是做好一件事之前的准备阶段。用窗口购票的例子来说就是把乘客付钱和得到火车票看成是一个整体。

  • 一致性

一致性的意思是事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态(其实也就意味着在事务期间,对数据的增删改要符合数据的完整性约束)。像这种比较正式的说法往往是用一个抽象的描述去形容另外一个抽象的东西,结果是更加糊涂了。购票这个例子中,所谓的一致性就是现金必须从乘客的手中扣除,而同时火车票也必须被卖出并交到乘客的手上。所以简单点说,就是工作单元中每个动作的执行结果必须被落实,不能出现有的成功了而有的失败了。这就是做好一件事所要达到的既定目标,只要当这件事的所有环节都完成以后才能算这件事完成了。

  • 隔离性

隔离性,在有的地方也叫独立性,其实意思都差不多。隔离性指的是各个独立事务之间的交互程度,是由一致性和并发性共同决定的。像购票的这个例子,如果同时有多名乘客在不同的窗口购票,如果处理不当,很可能在购票的时候会出现两个或两个以上的窗口锁定同一张火车票,并进行售卖的情况,最终不能保证事务的一致性。并发性越低,事务的隔离性越高,一致性也就越高。当提高事务的隔离性的时候,就很可能需要牺牲数据库的并发性来保证数据的一致性。所以当设置事务的隔离级别的时候,就需要综合考虑事务的一致性和并发性。因此通俗讲事务的隔离性就是指的事情应该怎么做。关于事务的隔离性以及隔离级别稍后会有详细说明。

  • 持久性

持久性指的是一个事务一旦提交,那它对数据库的更改就应该是永久的,不会因系统的失败而丢失。当完成购票以后,售票员得到乘客的车票钱,乘客得到售票员给的车票,不能因为售票系统的崩溃就对既有事实进行抵赖,所以从某种程度上来说,持久性也可以指不可抵赖性,签字盖章,交易完成。这就是事情的最终结果。

PS:把事务理解成将要做的事,从自己如何确保做好一件事的角度来考虑就比较容易理解事务的几个特性,毕竟我们自己也做过很多事,也遇到过各种各样的问题。比如比如项目组成员共同开发项目,一人一个模块,有的人完成了,有的人没完成,导致项目整体进度出现异常,这些都说明了事务的原子性和一致性。手头正做着工作,突然上头又让做别的工作,杂七杂八的,最终原本的工作不一定能按时完成,包括代码的检出、检入的时候出现的代码冲突和覆盖等问题,也都体现了事务的隔离性。工作的沟通中,口头说的容易忘,也很容易需求变更,这时候就需要编写需求说明,需求分析以及详细设计等文档以及保留来往邮件作为结果产物作为依据。

java事务(一)——事务特性的更多相关文章

  1. java面试题之----数据库事务的四大特性及隔离级别

    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...

  2. Java事务解析(事务的基本操作+隔离的等级+事务的四大特性+事务的概念)

    Java事务解析(事务的基本操作+隔离的等级+事务的四大特性+事务的概念) 什么是事务? 如果一个包含多个步骤的业务操作,这些操作被事务管理,那么这些操作要么同时成功要么同时失败 事务的四大特性(必须 ...

  3. 一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1 .mysql索引结构,各自的优劣 2 .索引的设计原则 3 .mysql锁的类型有哪些 4 .mysql执行计划怎么看 ...

  4. Java中的事务——JDBC事务和JTA事务

    Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...

  5. Java的JDBC事务详解

    Java的JDBC事务详解         分类:             Hibernate              2010-06-02 10:04     12298人阅读     评论(9) ...

  6. 数据库事务的四大特性以及事务的隔离级别(mysql)

      本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...

  7. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...

  8. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

    数据库事务的四大特性以及事务的隔离级别   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...

  9. 数据库中事务的四大特性(ACID)

    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...

  10. Java Web(八) 事务,安全问题及隔离级别

    事务 什么是事务? 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元. 事务的作用 事务在我们平常的CRUD(增删改查)操作当中也许不太常用, 但是如果我们有一种需求,一组操作中必须全部成功 ...

随机推荐

  1. 五分钟上手Git

    团队开发中.遵循一个合理.清晰的Git使用流程.是非常重要的.否则,每一个人都提交一堆杂乱无章的commit,项目非常快就会变得难以协调和维护.以下是ThoughtBot 的Git使用规范流程.我从中 ...

  2. vue构建完整项目-以及实现

    简介 由于开发vue项目的时候,需要重新搭建项目的架子,比较麻烦,其实之前做过的项目好多都可以直接拿过来用,比如接下来的这个项目,就可以满足平常的vue单页面开发. 该项目包括了: 全局配置axios ...

  3. Lumen开发:lumen源码解读之初始化(5)——注册(register)与启动(boot)

    版权声明:本文为博主原创文章,未经博主允许不得转载. register()是在服务容器注册服务, bootstrap/app.php /** * 注册外部服务 */ $app->register ...

  4. Android 热门技术干货

    http://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247484939&idx=1&sn=d1871b09de55ca6 ...

  5. 图解堆算法、链表、栈与队列(Mark)

    原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间 ...

  6. 【BZOJ4927】第一题 双指针+DP(容斥?)

    [BZOJ4927]第一题 Description 给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼 出一个正方形.注意木棍不能弯折.问方案数. 正方形:四条边都相等.四个角都是直角的四边 ...

  7. POJ 1113 Wall【凸包周长】

    题目: http://poj.org/problem?id=1113 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...

  8. php header, 允许ajax跨域访问

    <?php header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:* ...

  9. 类加载(一):static块 和 Class.forName

    1. class Some { static{ System.out.println("1"); } public Some(){ System.out.println(" ...

  10. Linux中的man

    1.查看命令的帮助信息 man mkdir 2.查看服务配置文件的帮助信息 man services 说明: a.如果没有man通过yum install man安装 b.如果命令和服务同名了,那就指 ...