目录
1、什么是事务?
2、事务特性(ACID)
2.1、原子性(Atomicity)
2.2、一致性(Consistency)
2.3、隔离性(Isolation)
2.4、持久性(Durability)
3、事务的并发问题
3.1、脏读
3.2、不可重复读
3.3、幻读
4、事务配置
1、什么是事务?
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有
操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所
有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作
失败,则事务将回滚,该事务所有操作的影响都将取消。
2、事务特性(ACID)
2.1、原子性(Atomicity)
事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中 出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分 割的整体,就像化学中学过的原子,是物质构成的基本单位。
2.2、一致性(Consistency)
事务开始前和结束后,数据库的数据完整性约束没有被破坏,事务前后操作数据是一致的 。比如 A向B转账,不可能A扣了钱,B却没收到。
2.3、隔离性(Isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是 隔离的,并发执行的各个事务之间不能互相干扰。比如A正在从一张银行卡中取钱,在A取钱的过 程结束前,B不能向这张卡转账。 两个事务之间是有隔离级别,隔离级别的不同会导致出现不同的问题。此时产生三种读: 脏读 幻读 不可重复读。
2.4、持久性(Durability)
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库 中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
3、事务的并发问题
3.1、脏读
事务A读取了事务B的更新的数据,然后B回滚操作,那么A读取的就是脏数据。
3.2、不可重复读
事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。
3.3、幻读
已知有两个事务A和B,A从一个表中读取了数据,然后B在该表中插入一些新数据,导致A再次读取同一个表,就会多出几行,简单来说,一个事务中先后读取一个范围的记录,但每次读取的纪录数不同,称为幻像读。
4、事务配置
引入依赖
org.springframework spring-tx5.2.15.RELEASE
spring.xml配置
//注册事务//开启事务注解 transaction-manager可以不写但名字必须是transactionManager
注解配置
//加到方法上 @Transactional @Override public Result selectLoginLog(Integer pageNum, Integer pageSize, Mapmap) { PageHelper.startPage(pageNum, pageSize); List list = loginLogMapper.selectLoginLog(map); PageInfo pageInfo = new PageInfo<>(list); return list.size() == 0 ? Result.success("没有数据") : Result.success(pageInfo); } //加到类上 @Transactional public class test{ }



