JavaWeb入门(四):JDBC之事务

一、什么是事务

事务(transaction):是数据库操作的最小工作单位,是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体向系统提交,要么都执行,要么都不执行。简单的来说事务是一组不可分割的操作集合。

二、事务的四个特性

  • 原子性(Atomicity):事务包含的所有数据库操作要么全部成功,要么全部失败回滚,强调事务的不可分割

  • 一致性(Consistency):一个事务执行前和执行后都必须处于一致性状态,强调的是事务的执行前后,数据的完整性要保持一致。拿转账来说,假设A用户和B用户两个人的钱加起来是10000,那么不管A和B之间如何转账,转几次账,事务结束后两个人的钱加起来应该还得是10000,这是事务的一致性

  • 隔离性(Isolation):一个事务执行不应受到其它事务干扰(一个事务未提交的业务结果是否对其它事务可见)

  • 持久性(Durability):事务一旦结束(提交/回滚),数据就持久保存到了数据库,一个事务一旦被提交了,那么对数据库的改变就是永久性的,即使在数据库故障的情况下也不会丢失提交的结果

三、数据库的隔离级别

数据库的隔离级别有4个,由低到高依次是:Read uncommited、Read commited、Repeatable read、Serializable

 

 四、数据库的隔离级别和几种读问题

  • 脏读:一个事务读取到另一个事务还没提交的数据,也就是说,一个事务正在对一条数据进行修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来取这条还没提交的数据,并据此做进一步处理,就会产生未提交的数据依赖关系,这种现象叫做脏读。

 

 

  • 重复读:一个事务读到了另外一个事务已经提交的update的数据,导致在当前事务中多次查询结果不一致。一个事务先后两次读取同一条数据,而事务在这两次读取数据之间 该数据被其它事务修改,则两次读取的数据不同,我们称为不可重复读。

  • 幻读(虚读):一个事务读取到另一个事务已经提交的insert的数据,导致在当前事务中多次查询的结果不一致,一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读

 

 

转载请注明出处:https:////www.cnblogs.com/Infancy/p/12510622.html

 

posted on 2020-03-16 12:41  猪肉王子-17  阅读(118)  评论(0编辑  收藏  举报

导航