JAVA概述
第一部分:java入门基础
第二部分:java常用类
第三部分:jdbc系列教程
第四部分:java高级特征
java8新特征详解
java文件操作专题教程

知识点

相关文章

更多

最近更新

更多

JDBC系列教程之十:隔离级别

2019-02-28 23:29|来源: 领悟书生

隔离级别:多线程并发读取数据时的正确性(一般用数据库的默认的)

l  connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

l  V:可能出现,X:不会出现

隔离级别

脏读

不可重复读

幻读

读未提交(Read uncommitted)

V

V

V

读已提交(Read committed)

x

V

V

可重复读(Repeatable read)

x

x

V

可串行化(Serializable )

x

x

x

脏读(dirty reads)

一个事务读取了另一个未提交的并行事务写的数据。

不可重复读(non-repeatablereads)

一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

幻读(phantom read)

一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

注:代码参考TxTest.java




本文链接:JDBC系列教程之十:隔离级别,转自请注明:http://www.656463.com/article/804

相关问答

更多
  • WDCP 隐藏Nginx版本号教程各大门户都隐藏nginx的版本号 他们如此做必有道理所以我们也学习吧总共两步!第一步:先到 /www/wdlinux/nginx-1.4.1(我升级了版本)/conf 下 找到 nginx.conf 文件然后打开找到 tcp_nodelay on;在下面那一行添加 server_tokens off; 即可如:keepalive_timeout60; tcp_nodelay on;server_tokens off;这样就行了 (高手别笑,教程本来就是要方便简便)第二步:如 ...
  • spring的事务处理主要是依靠AOP实现的,这个没什么好说的随便搜索一下,网上很多示例。 隔离级别是针对并发事务而言的,单个事务的处理很简单不多说。并发事务的处理则比较复杂,因为往往一条数据是跨事务的,这会造成许多不可预知的后果。 一般来说,系统执行并发事务时,会把当前在执行的事务独立起来,也就是和其他事务进行隔离。好像系统中只有这一个事务,其他事务不存在一样。这也就是完全隔离,即系统中只运行单位时间内,最多只有一个事务在执行,其他事务要等到该事务执行完毕之后才能执行,这在现实中基本是不可行的,比如,你要 ...
  • key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。   PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。   PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。   PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
  • 这个默认隔离级别是与具体的数据库相关的 采取的是具体数据库的默认隔离级别 不同的数据库是不一样的
  • 在使用Spring时,大部分会用到他的声明式事务,简单的在配置文件中进行一些规则配置,利用Spring的AOP功能就能轻松搞定事务问题;这里面就涉及到一个事务的传播属性问题Propagation,它在TransactionDefinition接口中定义,以供PlatfromTransactionManager使用,PlatfromTransactionManager是spring事务管理的核心接口。 TransactionDefinition public interface TransactionDefi ...
  • spring的事务处理主要是依靠AOP实现的,这个没什么好说的随便搜索一下,网上很多示例。 隔离级别是针对并发事务而言的,单个事务的处理很简单不多说。并发事务的处理则比较复杂,因为往往一条数据是跨事务的,这会造成许多不可预知的后果。 一般来说,系统执行并发事务时,会把当前在执行的事务独立起来,也就是和其他事务进行隔离。好像系统中只有这一个事务,其他事务不存在一样。这也就是完全隔离,即系统中只运行单位时间内,最多只有一个事务在执行,其他事务要等到该事务执行完毕之后才能执行,这在现实中基本是不可行的,比如,你要 ...
  • Oracle不支持可重复读取。 它仅支持Read Committed和Serializable。 我可能会误解,但为Oracle设置可重复读取的隔离级别可能会导致具有Serializable隔离级别的事务。 简而言之,您只需要支持您希望的隔离级别的数据库支持。 我不能说InnoDB和PostgreSQL,但如果它们不支持所需的隔离级别,它们也会适用。 数据库可以自动将隔离级别升级到更高级别以满足所需的隔离特性。 如果您的应用程序需要的隔离级别必须是可重复读取,您应该重新考虑这种方法。 像你正确推断的问题是, ...
  • TL; DR:Pg 9.1中可检测性的可串行性冲突得到了显着改善,因此升级。 从您的描述中弄清楚实际的SQL是什么以及您期望获得回滚的原因是很棘手的。 看起来你已经严重误解了可序列化的隔离,或许认为它完美地测试了所有的谓词,但它没有,特别是在Pg 8.4中。 SERIALIZABLE并不能完美地保证事务的执行就好像它们是串行运行一样 - 如果它完全可能的话,从性能的角度来看这样做会非常昂贵。 它只提供有限的检查。 确切地说检查了什么以及数据库与数据库以及版本之间的差异如何,因此您需要阅读适用于您的数据库版本 ...
  • 是的,您可以使用Resource元素中的defaultTransactionIsolation属性进行设置。
  • 您应该将hibernate的事务隔离级别设置为2(READ_COMMITTED的java.sql.Connection常量。 然后在您的SQL Server 2005实例中执行以下操作(没有活动连接): ALTER DATABASE [database_name] SET ALLOW_SNAPSHOT_ISOLATION ON; ALTER DATABASE [database_name] SET READ_COMMITTED_SNAPSHOT ON; 通过执行此查询进行测试: SELECT [name], ...