java事物入门

一,事物基本介绍
1.事物概述
事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
2.操作
开启事务:start transaction;
回滚:rollback
提交:commit
二,事物的特性

  1. 原子性:事务执行过程中的任何失败都将导致事务所做的修改失效。

对于数据修改,要么全部执行,要么全部不执行

  1. 一致性:当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

事务执行前后,数据状态保持一致性(例如转账,转账之后两人总金额不变)

  1. 隔离性:在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

一个事务的处理不能影响另一个事务的处理

  1. 持久性:事务处理结束,其效果在数据库中持久化。

即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

通俗理解,事务是一组原子操作单元,从数据库角度说,就是一组 SQL 指令。
事务是为了解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。

三.事物的隔离等级
概念:多个事物之间是隔离的,相互独立的。但是如果多个事物操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
存在问题:
脏读:一个事物,读取到另一个事物中没有提交的数据。
不可重复读(虚度):在同一个事物中,两次读取到的数据不一样。
幻读:一个事物操作(DML)数据表中所有记录,另一个事物添加了一条数据,则第一个事物查询不到自己的修改。
隔离级别:
read uncommitted: 读未提交,存在脏读、虚读、幻读
read committed: 读已提交,存在虚读、幻读
repeatable read(MySQL默认): 可重复度,存在幻读
serializable: 串行化 可以解决所有问题
注意:隔离级别从小到大安全性越来越高,但是效率越来越低。
数据库查询隔离级别:select @@tx_isolation;
数据库设置隔离级别:set global transaction isolation level 级别;
四.事物的传播行为
PROPAGATION_REQUIRED: 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这 个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS: 支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY: 支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。 虽然有7种,但是常用的就第一种REQUIRED和第四种REQUIRES_NEW
五.事务并发处理可能引起的问题
脏读(dirty read):一个事务读取了另一个事务尚未提交的数据
不可重复读(non-repeatable read):
一个事务的操作导致另一个事务前后两次读取到不同的数据
幻读(phantom read):一个事务的操作导致另一个事务前后两次查询的结果数据量不同
六.不可重复度和幻读区别:

不可重复读的重点是修改,幻读的重点在于新增或者删除。

例1(同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 ):事务1中的A先生读取自己的工资为 1000的操作还没完成,事务2中的B先生就修改了A的工资为2000,导 致A再读自己的工资时工资变为 2000;这就是不可重复读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值