java事务中修改后查询_java中如何修改事务的隔离级别

事务的特性:

原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 (多条语句要么都成功,要么都失败。)

一致性(Consistency)事务前后数据的完整性必须保持一致。转账(减钱,加钱)

隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

持久性(Durability)持久性是指一个事务结束(一旦被提交或者回滚),它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

并发访问问题(不考虑隔离性):

1.脏读:A事务读取到B事务未提交或是已经提交的数据。

2.不可重复读:A事务读取到B事务已经提交的数据。导致A事务多次查询出来数据不一致。

3.虚读/幻读:A事务读取到B事务已经提交的数据。导致A事务多次查询出来数据不一致。这种情况比较少见,操作一万次还不一定能够遇见一次。

事务的隔离级别:

Java API,事务的隔离级别大致分为4种。在接口Connection中的setTransactionIsolation方法可以设置事务的隔离级别。

void setTransactionIsolation(int level)

throws SQLException

试图将此 Connection 对象的事务隔离级别更改为给定的级别。可能的事务隔离级别是 Connection 接口中定义的常量。

注:如果在事务处理期间调用此方法,则结果由实现定义。参数:level - 以下 Connection 常量之一:Connection.TRANSACTION_READ_UNCOMMITTED、Connection.TRANSACTION_READ_COMMITTED、Connection.TRANSACTION_REPEATABLE_READ 或 Connection.TRANSACTION_SERIALIZABLE。(注意,不能使用 Connection.TRANSACTION_NONE,因为它指定了不受支持的事务。)抛出:Connection 常量之一.

详细介绍下:

首先在数据库查看下自己数据库的隔离级别:

show variables like '%isolation%';

select @@tx_isolation;

void setTransactionIsolation(int level),level的参数分别是,1,2,4,8;

mysql默认隔离级别是:4

oracle默认隔离级别是:2

Connection.TRANSACTION_READ_UNCOMMITTED :level=1,会出现,脏读,不可重复读,虚读/幻读等情况。

Connection.TRANSACTION_READ_COMMITTED: level=2,会出现,不可重复读或是虚读/幻读。

Connection.TRANSACTION_REPEATABLE_READ :    level=4,会现虚读/幻读,可惜是万分之一的概率,我操作的时候,一次没有遇见过,尴尬。

Connection.TRANSACTION_SERIALIZABLE :  level=8,不会出现上面的几种情况,虽然安全,但是效率不高。

一般使用的时候,根据Connetion连接对象设置参数:

数据库连接对象.setTransactionIsolation(参数);

参数:1,2,4,8

标签:事务,TRANSACTION,java,隔离,level,Connection,级别

来源: https://www.cnblogs.com/chenyanlong/p/10973867.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值