JDBC 事务隔离级别

简介: 本文总结了 JDBC 事务隔离级别。

本文总结了 JDBC 事务隔离级别。

事务隔离级别定义了在一个事务中,哪些数据是对当前执行的语句“可见”的。在并发访问数据库时,事务隔离级别定义了多个事务之间对于同个目标数据源访问时的可交叉程度。

可交叉程度可分为以下几类。

可交叉程度

dirty reads(脏读)

当一个事务能看见另外一个事务未提交的数据时,就称为脏读,换言之,一个事务修改数据后再未提交之前,就能被其它事务看见。如果这个事务被回滚了而不是提交了,那么其它事务看到的数据则是不正确的,是“脏”的。

nonrepeatable reads(不可重复读)

假设事务 A 读取了一行数据,接下来事务 B 改变了这行数据,之后事务 A 又再一次读取这行数据,这时候事务 A 就取到了两个不同的结果。

phantom reads(幻读)

假设事务 A 通过一个 where 条件读取到了一个结果集,事务 B 这时插入了一条符合事务 A 的 where 条件的数据,之后事务 A 通过同样的 where 条件再次进行查询时,发现了多出来一条数据。

事务隔离级别

JDBC 规范增加了 TRANSACTION_NONE 隔离级别,来满足了 SQL:2003 定义的 4 种事务隔离级别。隔离级别从最宽松到最严格,排序如下所示:

TRANSACTION_NONE

这意味着当前的 JDBC 驱动不支持事务,也意味着这个驱动不符合 JDBC 规范。

TRANSACTION_READ_UNCOMMITTED

允许事务看到其它事务修改了但未提交的数据,这意味着有可能是脏读、不可重复读或者幻读。

TRANSACTION_READ_COMMITTED

一个事务在未提交之前,所做的修改不会被其它事务所看见。这能避免脏读,但避免不了不可重复读和幻读。

TRANSACTION_REPEATABLE_READ

避免了脏读和不可重复读,但幻读依然是有可能发生的。

TRANSACTION_SERIALIZABLE

避免了脏读、不可重复读以及幻读。

参考资料

目录
相关文章
|
弹性计算 安全 Ubuntu
docker启动容器提示read init-p: connection reset by peer: unknown问题
docker启动容器提示read init-p: connection reset by peer: unknown问题
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
1094 0
|
机器学习/深度学习 算法 机器人
机器人控制中常见的算法总结
机器人控制中常见的算法总结
709 0
|
9月前
|
机器学习/深度学习 Web App开发 人工智能
Amurex:开源AI会议助手,提供实时建议、智能摘要、快速回顾关键信息
Amurex是一款开源的AI会议助手,提供实时建议、智能摘要、快速回顾关键信息等功能,帮助用户提升会议效率。本文将详细介绍Amurex的功能、技术原理以及如何运行和使用该工具。
398 18
Amurex:开源AI会议助手,提供实时建议、智能摘要、快速回顾关键信息
|
9月前
|
存储 前端开发 JavaScript
React 表单输入组件 Input:常见问题、易错点及解决方案
本文介绍了在 React 中使用表单输入组件 `Input` 的基础概念,包括受控组件与非受控组件的区别及其优势。通过具体代码案例,详细探讨了创建受控组件、处理多个输入字段、输入验证和格式化的方法,并指出了常见易错点及避免方法,旨在提升表单的健壮性和用户体验。
229 4
|
11月前
|
Java 索引
Java“StringIndexOutOfBoundsException”解决
Java中“StringIndexOutOfBoundsException”异常通常在字符串索引超出其边界时抛出。解决方法包括检查字符串长度、确保索引值有效,以及使用条件语句避免越界访问。
539 2
|
11月前
|
Oracle 关系型数据库 Java
数据库的 IO 到底有多慢?
本文通过对比Java程序从Oracle、MySQL数据库读取数据与读取文本文件的性能,揭示数据库IO速度远低于文件读取的现状。在相同硬件环境下,读取3000万行记录,Oracle耗时280秒,MySQL耗时380秒,而文本文件仅需42秒。此外,通过SPL实现并行处理,可显著提升读取速度,尤其是在处理大规模数据时。实验还探讨了数据库接口慢的问题及其对性能的影响,提出在追求高性能计算时应尽量避免从数据库读取数据的建议。
|
SQL 关系型数据库 数据库连接
Python连接线上数据库的实战指南
Python连接线上数据库的实战指南
886 1
|
存储 缓存 NoSQL
Redis缓存应用与最佳实践:优化性能与处理挑战
本篇深入探讨了Redis在缓存应用中的最佳实践,旨在优化性能并处理常见的缓存挑战。我们首先介绍了设计高效缓存架构的基本原则,展示了如何使用Redis作为缓存存储来提升应用性能。进一步地,我们讨论了缓存更新策略,演示了如何在源数据更新时同时更新缓存,以确保数据的一致性。
1118 0

热门文章

最新文章