事务
事务定义:
事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰。作为一名软件设计师,必须了解事务并合理利用,以确保数据库保存正确、完整的数据。数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚(rollback)。
事物的特性
事物有四个特性,人们简称为ACID。下面详细介绍:
原子性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。
一致性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。
隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即事务不会查看由另一个并发事务正在修改的数据。这种隔离方式也叫可串行性。
持久性:事务完成之后,它对系统的影响是永久的,即使出现系统故障也是如此。
并发访问可能引起的问题
1.读脏数据。这个好理解,如果第一个事物修改数据,但是没有提交,而第二个事物读取了第一个事务修改的数据,但是,此时,第一个事物回滚了事物,这就导致第二个事务读的数据是假的,错的。我可能想到的办法了,在修改期间,把所修改的记录锁着,在修改完成前,别的事务不能读取到这些记录
2.不可重读 :如果一个事务(我们记为第一个事务)中包含了两天读取一样数据的select语句,比如
start
select × from table where id=1 ;
//1标记
select x from table where id=1;
end;其中『1标记』处,我们可以理解为做一些逻辑处理。当这个事务在执行了『1标记』的时候,另外一个事务(我们记为第二个事务),修改了这条记录。同时提交。这个时候第一个事务的第二次查询语句就执行了,结果读取出来的数据就和第一次不同了。这就是不可重读。
解决办法:如果第一个用户在两次读取之间锁住要读取的记录,别的用户不能去修改相应的记录就能避免这种情况
3.幻读 :这个和『不可重读』发生的条件基本差不多。如果一个事务(我们记为第一个事务)中包含了两天读取一样数据的select语句,比如
start
select × from table where id=1 ;
//1标记
select x from table where id=1;
end;其中『1标记』处,我们可以理解为做一些逻辑处理。当这个事务在执行『1标记』的时候,另外一个事务(我们记为第二个事务),插入或者删除了一些记录,同时提交。这个时候第一个事务的第二次查询语句就执行,结果读取出来的数据就和第一次不同了,多了几条或者少了几条数据。这就是不可重读。
解决办法:如果第一个用户在两次读取之间锁住要读取的记录,别的用户不能去修改相应的记录,也不能增删记录,就能避免这种情 况。
锁
对所有可引用的类型(如行,页或者表)加一个锁,这个锁只要是开的时候,事务才可以进去,否则就在们外排队等着,相当于java中线程的同步。当事务进入这个加锁的类型以后,将锁锁着。当事务离开的时候,把们打开。以供其他事务引用。根据引用类型的不同,我们定义一下锁
表类型:锁定整个表
行类型:锁定一行
文件类型:锁定一个文件
数据库类型:锁定整个数据库
页类型:锁定8k为大小的数据库页
我们都明白,锁的范围越大,产生的阻碍就越大,也就会越影响系统的性能。所以锁要用的合适,否则效果会适得其反。
事务隔离
为了解决上面的并发引起的问题。我们使用事务隔离来实现。主要有4个事务隔离
1.读取未提交
2.读取以提交
3.可重复读
4.可序列化
读操作未提交(Read Uncommitted):说明一个事务在提交前,其变化对于其他事务来说是可见的。这样脏读、不可重读和幻读都是允许的。当一个事务已经写入一行数据但未提交,其他事务都不能再写入此行数据;但是,任何事务都可以读任何数据。这个隔离级别使用排写锁实现。
读操作已提交(Read Committed):读取未提交的数据是不允许的,它使用临时的共读锁和排写锁实现。这种隔离级别不允许脏读,但不可重读和幻读是允许的。
可重读(Repeatable Read):说明事务保证能够再次读取相同的数据而不会失败。此隔离级别不允许脏读和不可重读,但幻读会出现。
可串行化(Serializable):提供最严格的事务隔离。这个隔离级别不允许事务并行执行,只允许串行执行。这样,脏读、不可重读或幻读都可发生。
简单的描述,希望有用,同时有出错的地方,还请指正
分享到:
相关推荐
**JPA(Java Persistence API)简介** Java Persistence API是Java平台上的一个标准接口,用于处理对象持久化到数据库的过程。JPA由Java EE和Java SE规范定义,它为开发人员提供了一种统一的方式来管理和访问数据库...
Spring 事务管理是Java开发中不可或缺的一部分,尤其是在企业级应用中,它确保了数据的一致性和完整性。事务的四大特性,即原子性、一致性、隔离性和持久性,是数据库管理系统中事务处理的基本准则。 1. **原子性...
分布式事务是随着互联网技术发展和微服务架构的普及而变得愈发重要的概念。本地事务,即在单机数据库环境下的事务,通常遵循ACID(原子性、一致性、隔离性、持久性)原则,确保数据操作的完整性和一致性。然而,随着...
### 分布式事务详细介绍 #### 一、分布式事务概述 分布式事务是指在分布式系统中,为了保持事务的ACID(原子性、一致性、隔离性、持久性)特性,需要跨越多个资源管理器(如数据库、消息队列等)进行协调的一系列...
#### 一、Linq事务简介 在软件开发过程中,特别是涉及到数据库操作时,事务处理是非常重要的一个环节。事务可以确保一系列操作要么全部成功,要么全部失败,这对于保持数据的一致性和完整性至关重要。Linq...
一、事务简介 事务是数据库操作的基本单位,它确保一组SQL语句要么全部成功,要么全部失败,以维护数据的一致性。在MySQL中,事务通常涉及INSERT、UPDATE、SELECT和DELETE等操作。当操作涉及多表或多条SQL时,就...
### Spring 1.2声明式事务简介 Spring框架中的声明式事务管理是通过AOP(面向切面编程)来实现的。这种方式相比于编程式事务管理更为简洁、易于理解和维护。Spring 1.2版本引入了更加灵活且易于使用的声明式事务...
##### 1.2 XA 事务简介 XA 事务是基于 X/Open XA 规范的一种分布式事务处理机制。这种机制允许应用程序在一个全局事务中协调多个资源管理器(如数据库、消息队列等),从而确保事务的一致性和完整性。具体来说,XA ...
1. 事务简介: 事务的四大特性——ACID(原子性、一致性、隔离性、持久性)是其核心。原子性保证了事务中的所有操作要么全部完成,要么全部不完成;一致性确保事务执行前后数据库保持一致状态;隔离性防止并发事务间...
标题中的“28家国际会计师事务所概览及四大会计师事务所简介”指的是对全球范围内具有较高知名度和影响力的会计服务提供商的概述。这些事务所在全球金融市场上扮演着至关重要的角色,为公司、政府和个人提供审计、...
1. **事务简介** 事务是一系列数据库操作的逻辑单元,它具有四个关键属性,即ACID(原子性、一致性、隔离性和持久性)。原子性确保事务中的所有操作要么全部执行,要么全部不执行;一致性保证事务结束后,系统处于...
Redis从入门到精通高清,迅雷播放器组件可顺利播放
1.1. 事务简介 事务是数据库操作的基本单元,其核心在于保证一组操作的原子性、一致性、隔离性和持久性,这些特性被称为ACID属性。 1.1.1. 原子性(Atomicity) 原子性确保事务中的每个操作要么全部完成,要么全部...
本文主要介绍了事务的概念、事务的特性、事务状态、事务管理等内容,详情请看下文。 本文来自简书,由火龙果软件Anna编辑、推荐。 事务是一系列操作的集合,从宏观角度,事务是访问数据库的一个逻辑单元(集合),其...
- **事务简介**:事务是数据库操作的基本单位,它确保了一系列操作要么全部完成,要么完全不进行。事务可以提高数据的一致性和完整性。 - **事务限制**:事务不能嵌套,即在一个未提交或回滚的事务内部不能开启新的...
【Java理论与实践:理解JTS—平衡安全性和性能】这篇文章深入探讨了Java事务服务(JTS)在J2EE环境中的应用,特别是在EJB组件中的事务管理。事务是确保系统数据完整性的重要机制,它提供了异常处理的能力,类似于...
##### 2.1 Spring AOP简介 面向切面编程是一种编程范式,旨在通过将程序中的横切关注点与业务逻辑分离,从而提高代码的可读性和可维护性。在Spring中,AOP可以通过基于XML的配置或者基于注解的方式实现。 ##### ...
#### 一、分布式事务简介 在分布式系统中,事务管理是确保数据一致性和系统可靠性的重要手段。分布式事务是指在一个分布式系统中,一组操作要么全部成功,要么全部失败,从而保持数据的一致性。这些操作可能分布在...