上一章节《Spring4基础三一-数据库篇-JDBC模板-3》
如果文中有纰漏,请多多指正!!!
事务的概念
一、事务是什么
事务是应用程序中一系列严密的操作(典型的:银行转账业务),所有操作必须全部成功完成,否则所有已成功的操作都会被撤消。也就是说,在一个事务中的一系列的操作的最终结果是要么全部成功,要么一个都不做。
二、事务的特征ACID
1.原子性(Atomicity)
原子性是指一个事务是一个不可分割的工作单元,事务包含的所有操作要么全部完成,要么完全不起作用。
2.一致性(Consistency)
一致性是指事务执行前后,处理的数据必须处于一致的状态,而不会是部分完成部分失败。也就是事务要求所有的DML语句操作,必须保证同时成功或同时失败(失败回滚)。
3.隔离性(Isolation)
隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。也就是一个事务不会影响其它事务的运行;
4.持久性(Durability)
持久性是指在事务完成后,该事务对数据库所作的更改将持久地保存在数据库中,无论发生什么系统错误,结果数据都不应该受到影响;
三、事务的隔离级别
1.read uncommitted 读未提交(级别最低)
1) 事务A和和事务B,事务A未提交的数据,事务B可以读取2) 事务B读取到的数据可以叫做“脏数据”或者“脏读 Dirty Read”3) 读未提交隔离级别最低,数据库默认隔离级别一般都高于该隔离级别;
2.read committed 读已提交
1) 事务A和事务B,事务A已提交的数据,事务B才可读取到;2) 该隔离级别可以避免脏数据;3) 该隔离级别能够导致“不可重复读取”(事务A提交前后,B事务读取到的数据前后不一致)4) 该隔离级别可以避免脏数据;
3.repeatable read 可重复读
1) 事务A和事务B,事务A提交之后的数据,事务B读取不到;也就是说,事务A提交前后,事务B读取到数据都是事务A提交之前的数据。2) 对于B事务来说,虽然可以达到“可重复读”效果,但是会导致“幻象读”(A事务提交后,数据已变更,B事务还是读取A事务提交前的数据)。3) 这种隔离级别可以避免“脏读和不可重复读”
4.serializable 串行化
1) 事务A和事务B,事务A在操作数据库表中数据的时候,事务B叧能排队等待。2) 最安全的,但是吞吐量太低,用户体验不好。