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

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

参考资料

目录
相关文章
|
3月前
|
SQL Oracle 关系型数据库
详解 MySQL 的事务以及隔离级别
详解 MySQL 的事务以及隔离级别
48 0
|
SQL 关系型数据库 MySQL
MySQL 中事务以及事务隔离级别的详解
MySQL 中事务以及事务隔离级别的详解
74 0
|
7月前
|
Oracle 关系型数据库 MySQL
MySQL事务的隔离级别
MySQL事务的隔离级别
69 1
MySQL事务的隔离级别
|
7月前
|
SQL 缓存 关系型数据库
MySQL事务详解与隔离级别的实现
四个特性 原子性:所有操作要么全部执行要么全部不执行,一条指令失败则数据进行回滚,回到所有指令执行前的状态。 一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。即数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。比如A向B转账,不可能A扣了钱,B却没收到。 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 持久性:事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
|
Oracle Java 关系型数据库
22JavaWeb基础 - JDBC事务
22JavaWeb基础 - JDBC事务
43 0
|
SQL Java 数据库连接
JDBC事务处理
JDBC事务处理
65 0
|
SQL 安全 关系型数据库
SqlServer事务详解(事务隔离性和隔离级别详解)(下)
SqlServer事务详解(事务隔离性和隔离级别详解)(下)
|
SQL Oracle 关系型数据库
SqlServer事务详解(事务隔离性和隔离级别详解)(上)
SqlServer事务详解(事务隔离性和隔离级别详解)
|
SQL Oracle Java
JDBC数据库事务
JDBC数据库事务
|
SQL Oracle 关系型数据库
jdbc数据库事务
jdbc数据库事务
jdbc数据库事务