Java学习之事务四大特性和隔离级别

事务

事务(Transaction),一般是指要做的或所做的事情,这些事情必须全部都完成,或者造成的影响和改变全部都撤销。

四大特性

Java中,事务有四个特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

1、原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
(原子性保证事务内的操作要么都发生,要么都不发生。假如所有的操作都成功了,那么事务是成功的,只要其中任何一个操作失败,那么事务会进行回滚。)

2、一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。

(A和B一共有2000块钱,无论他们两个谁向谁转账,转了几次帐,始终不能少于或者多余2000块钱。)

3、隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
(假如有两个线程T1和T2,T2要么在T1开始之前结束,要么在T1结束之后开始,两个线程不能互相影响。)

4、持久性(Durability):当事务正确完成后,它对于数据的改变是永久性的。
(A卡里有2000块钱,当A从卡里取出500,在不考虑外界因素干扰的情况下,那么A的卡里只能剩1500。不存在取了500块钱后,卡里一会剩1400,一会剩1500,一会剩1600的情况。)

并发造成的问题

1、脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
(A的支付宝里有1000块钱,想往银行卡里提现500,此时已输入密码,显示“银行正在处理中”,这时候A的老婆想用A支付宝里的1000块钱还花呗,结果发现剩下500,过了一会银行因为网络原因导致提现失败,转出的500块钱又回到了支付宝,此时A的支付宝里还是原来的1000。在这期间,A的老婆看到支付宝里的“500”,就是脏读。)

2、幻读(虚读):一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的。幻读是事务非独立执行时发生的一种现象。
(假如此时有两个线程T1和T2,T1把数据表中每一行的第一个字段都改成了A后,T2新增了一行数据,且第一个字段是B,然后T1再读数据表的时候发现还有一行未被修改。)

3、不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果,中间正好另一个事务更新了该数据,两次结果相异,不可被信任。
(两个线程T1和T2,T1把某一行中的第一个字段改成了A后(此时T1读取的数据是A),T2又把此字段改成了B,然后T1再次读取这个字段时发现数据是B,和第一次读取的A不一样。)

脏读是在另一个事务未提交时读取了数据,而幻读和不可重复读都是在另一个事务已提交后读取了数据。

幻读和不可重复读的区别在于:幻读着重在对数据的整体(例如整张表)而且主要发生在进行增加和删除的操作时,而不可重复读侧重在具体的某一行或者某一个字段主要发生在修改数据时。

隔离级别

  • 未提交时读 Read uncommitted(最低级别,任何情况都无法保证。)
  • 已提交后读 Read committed(可避免脏读的发生。)
  • 可重复读 Repeatable read(可避免脏读、不可重复读的发生。)
  • 序列化(串行化) Serializable(可避免脏读、不可重复读、幻读的发生。)

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。大多数数据库的默认级别就是Read committed,比如Sql Server 和 Oracle。 MySQL的默认隔离级别是Repeatable read。

补充:

1、事务隔离级别为读提交时,写数据只会锁住相应的行。

2、事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

3、事务隔离级别为串行化时,读写数据都会锁住整张表。

原文地址:https://www.cnblogs.com/Bernard94/p/12362349.html

时间: 2024-11-01 01:02:04

Java学习之事务四大特性和隔离级别的相关文章

事务的特性与隔离级别

事务的定义: 简单的说事务就是一组原子性的SQL语句.我们可以将这组语句理解为一个工作单元,要 么全都执行,要不都不执行. 事物的四大特性(简称ACID): 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部提交成功,要么全部失败回滚. 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致. 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的.一个事务所做的修改在提交之前

数据库事务的四大特性和隔离级别

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即原子性(Atomic).一致性(Consistent).隔离性(Insulation)和持久性(Duraction). 原子性(Atomic):事务是一个完整的操作,事务的各个操作步骤是不可分的.即要么都执行,要么都不执行. 一致性(Consistent):事务执行的结果必须使数据库从一个一致性状态

数据库事务的四大特性及隔离级别

数据库事务 1.原子性 即数据库在执行一条sql命令时只有两种结果,要么全部执行成功,要么回滚.所以数据库操作成功要么应用到所有数据库,要么操作失败不对数据造成任何影响. 2.一致性 即数据库必须从一个一致性状态转换成例外一个一致性状态,事物执行之前和执行之后都必须是一致性状态.比如说a,b,c加起来100块钱,不论abc怎么转账,转多少次,最后三个加起来还是100.这就是事物的一致性. 3.隔离性 当多个用户并发访问数据库时,数据库会为每一个用户开启事务,不能被其他事务操作干扰,多个并发事务之

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

事务 什么是事务? 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元. 事务的作用 事务在我们平常的CRUD(增删改查)操作当中也许不太常用, 但是如果我们有一种需求,一组操作中必须全部成功执行,才算完成任务,只要有一个出错了,那么所有的任务都将回到最初的状况,恢复原样.那么这就需要使用事务了.如: 银行转账,购买飞机票... 事务的特性 事务具有4个特性(ACID):原子性(Atomicity).一致性(Consistency).隔离性(lsolation).持久性(Durabili

数据库事物的四大特性及隔离级别

数据库的事务:事务就是单个数据逻辑单元组成的对象操作集合,而数据库终极目标就是是数据库从一个一致的状态转换到另一个一致的状态. 事务的四大特性(ACID): 原子性 Atomicity 事物包含的所有数据库操作要么全部成功,要么全部失败回滚 一致性 Consistency 一个事务执行前后都必须处于一致性状态 隔离性 Isolation 一个事务未提交的业务结果对于其它事务不可见 持久性 Durability 一个事务一旦被提交了那么对数据库中数据的改变就是永久性的 数据库中读写时的安全问题:

事务的特性和隔离级别

1.事务的特性ACID 1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致. 3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离. 4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变 就是永久性的,接下来即使数据

数据库事务、特性及隔离级别

一.事务    事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.而这些逻辑工作单元需要具有原子性,  一致性,隔离性和持久性四个属性,统称为ACID特性. 二.事务的4个基本特征   ●  原子性(Atomic):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败. ●  一致性(Consistency):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态.

数据库事务的ACID特性和隔离级别

1. 事务的四个特性 数据库事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.一方面,当多个应用程序并发访问数据库时,事务可以在应用程序间提供一个隔离方法,防止互相干扰.另一方面,事务为数据库操作序列提供了一个从失败恢复正常的方法. 事务具有四个特性:原子性(Atomicity).一致性(Consistency).隔离型(Isolation).持久性(Durability),简称ACID. 1.1 原子性(Atomicity) 事务的原子性

数据库事务的4大特性与隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执