public enum TransactionLevel extends Enum<TransactionLevel>
脏读(Dirty Read):
一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据
不可重复读(Non Repeatable Read):
在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致
幻读(Phantom Read):
在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,且可以再次读取同一条记录。
| 枚举常量和说明 |
|---|
NONE
驱动不支持事务
|
READ_COMMITTED
禁止脏读,但允许不可重复读和幻读
此级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题。
|
READ_UNCOMMITTED
允许脏读、不可重复读和幻读
在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)
|
REPEATABLE_READ
禁止脏读和不可重复读,但允许幻读,MySQL的InnoDB引擎默认使用此隔离级别。
|
SERIALIZABLE
禁止脏读、不可重复读和幻读
虽然Serializable隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降,应用程序的性能会急剧降低。
|
| 限定符和类型 | 方法和说明 |
|---|---|
int |
getLevel()
获取数据库事务级别int值
|
static TransactionLevel |
valueOf(String name)
返回带有指定名称的该类型的枚举常量。
|
static TransactionLevel[] |
values()
按照声明该枚举类型的常量的顺序, 返回
包含这些常量的数组。
|
public static final TransactionLevel NONE
public static final TransactionLevel READ_UNCOMMITTED
在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)
public static final TransactionLevel READ_COMMITTED
此级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题。
不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。
public static final TransactionLevel REPEATABLE_READ
此级别下,一个事务可能会遇到幻读(Phantom Read)的问题。
幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,可以成功,且可以再次读取同一条记录。
public static final TransactionLevel SERIALIZABLE
虽然Serializable隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降,应用程序的性能会急剧降低。
public static TransactionLevel[] values()
for (TransactionLevel c : TransactionLevel.values()) System.out.println(c);
public static TransactionLevel valueOf(String name)
name - 要返回的枚举常量的名称。IllegalArgumentException - 如果该枚举类型没有带有指定名称的常量NullPointerException - 如果参数为空值public int getLevel()
Copyright © 2024. All rights reserved.