数据库事务隔离级别

JDBC事务隔离级别主要是用在并发的情况下

JDBC事务隔离级别:(各个数据库不一样,以下级别递增)

1、TRANSACTION_NONE  表示不支持事务,这个就不解释了

2、TRANSACTION_READ_UNCOMMITTED  允许看到未提交事务,也就是说会出现脏读

       A更新了一条记录,但是还未提交事务,这时B查看同一张表能够看到A更新的数据,当然要是之后A提交了事务,那不会造成太大问题,但是万一A在B查询到这条更新的数据         后又回滚了事务,那么也就是说实际上没有更新这条数据,但是B却读到了这条数据,这就是所谓脏读,要解决脏读,使用下一个事务隔离级别

3、TRANSACTION_READ_COMMITTED  读提交(大部分数据库默认是这个,oracle,sqlserver)

     只有当事务提交之后更新的数据才能被其他事务读取到,自然避免了脏读,但是还是有一个问题,举个现实的例子:A查到他的银行账户里有2000块钱,但是这时他的妻子B在        网上转账,将这2000元钱转出了,这时A想要刷卡消费,却显示余额不足,A很奇怪:明明有钱的呀?  问题出在哪里?就是因为A开启了一个事务之后,他的妻子又开启了一个     事务,而且妻子开启的事务在A之前修改了数据库。那么要怎么解决?请看下一个级别

4、TRANSACTION_REPEATABLE_READ  读重复(mysql默认是这个,安全级别真高。。)

   针对读提交出现的“不可重复读”问题,只需要在A开启一个事务后,其他人开启的事务无法对数据进行修改就可以了。

  但是这还是存在一个问题:其他人是无法进行修改了,但是要是A修改了,而其他人正好在查询呢?比如A查询后发现银行卡中有2000元,这时他妻子也进行查询这个月的消费情   况是1000元,然后A又进行了消费,消费1000元,然后妻子打印凭条的时候发现消费了2000元,妻子很奇怪。。。。。。也就是说读重复只是控制了除第一个开启事务以外的其   他用户修改,但是要是反过来呢?第一个开启事务的用户是可以修改的,要是他修改了会造成其他用户的幻读

5、TRANSACTION_SERIALIZABLE  序列化

级别最高,事务顺序执行。。。。

以上的事务级别顺序提高,安全性自然是越来越提高,但是效率显然也是越来越低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值