事务和事务的隔离性总结

一:事务是什么
     事务是针对数据库的一组操作(多条Sql命令执行),要么都成功,要么都失败。

二:事务的执行原理
      默认情况下,我们向数据库提交的sql命令是自动提交的。开启事务本质上就是关闭自动提交功能,改为手动提交,只需要将提交事务的操作放在最后执行。这样一来,一旦在命令的执行过程中出现异常,由于没有提交事务,之前的操作就会被回滚掉。
三:多线程事务会引发的情况
      1.脏读(dirty read):
          读取到了另一个事务中未被提交的数据;
      2.不可重复读(non-repeatable read):
          在一个事务中两次的查询结果不一致,原因是因为另一个事务执行的update操作;
      3.幻读/虚读(phantom read   ):
           在一个事务中两次查询的记录不一致,原因是另一个事务执行的insert和delete操作;
     
           不可重读的与虚读的区别:
               前者是在事务中两次查询到的记录的值不同
               后者是在事务中两次查询到的记录的数量不同
四:事务的隔离级别
     1.serializable:可串行化
          能够避免脏读、幻读、不可重复读的情况发生,但是会引发线程堵塞
     2.repeatable read:可重复读
          能够避免脏读、不可重复读的情况的发生(mysql中此级别能够避免幻读情况)
     3.read committed:读取已提交的内容
          能够避免
     4.read uncommitted:读取未提交的内容
          没什么作用,但是会提升性能。
五:事务的特性
      1.原子性
          组成事务的一组sql命令形成了一个逻辑单元,不能只执行其中的一部分。
      2.一致性
          在事务处理前后,数据库的数据是一致的(数据库的数据完成行约束)。
      3.隔离性
          一个事务处理对另一个事务处理的影响。
      4.持续性
          事务处理的效果能够被永久保留下来
六:在JDBC中使用事务(Connection对象)
      1.开启事务:
          setAutoCommit(false);
      2.提交事务:
          commit();
      3.回滚事务:
          rollback();
      4.设置事务的隔离级别:
          setTransactionIsolationn(int level)
               level:TRANSACTION_NONE
                     TRANSACTION_READ_CMMITTED
                     TRANSACTION_READ_UNCOMMITTED
                     TRANSACTION_REPEATABLE_READ
                     TRANSACTION_SERIALIZABLE

     

转载于:https://my.oschina.net/mlongbo/blog/76134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值