事务总结:
准备概念:
回滚(rollback)与持久化(comitte)
基本概念
1.什么是事务
2.事务的四大基本特性
3.并发事务产生三大的问题
4.如何解决事务产生的问题,四个隔离级别
1.事务,字面意思就事在数据库中的一系列(sql)操作要么都做(执行),要么都不做(不执行),以此在保证数据库中的数据安全。比如为了改变数据:Int money ,需要执行SqlA和SqlB,开启了事务,SqlA和SqlB 要么同时执行,要么都不执行。若sqlA与sqlB都成功,money新数据持久化到数据库(commit),若SqlA与SqlB其中任意一条sql错误,money数据就回滚为两条sql执行前的数据(rollback)。
2.事务的概念如上,还有四大特性ACID,分别是原子性,一致性,隔离性,持久性
1)原子性(Atomicity):
事务是数据库的逻辑工作单元,事务中包括的诸多操纵要么全做,要么全不做。
2)一致性(Consistency):
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3)隔离性(Isolation):
一个事务的执行不能被其他事务干扰。
4)持续性/永久性(Durability):
一个事务一但提交,它对数据库中数据的改变就应该是永久性的。
3.由于并发访问,事务有3大问题假设有事务a,和事务b同时操作数据库(操作同张表C),字段D原数据d0,一条原记录A
脏读,事务b读到了事务a修改后的数据d1(未提交),事务a此时回滚为d0,事务b读到的数据d1就是无效的,此为脏读
不可重复读: 针对update修改数据
1 ) 事务b从数据库读数据D为d0
2)事务a修改数据D为d1,并提交持久化进数据库
3 ) 事务b再次读数据D变为d2,前后两次数据不一致
虚读 :针对insert增加记录而言
1 ) 事务b从数据库读表C的记录(假设1条记录A)
2)事务a增加数据库表C记录(增加记录B)
3 ) 事务b再次读数据库表C记录(2个记录,记录A与B)
4.四大隔离方法(解决并发问题)
1)读未提交(脏读,不可重复读,虚读)
2)读已提交(不可重复读,虚读)事务A修改或增加记录提交前,事务B不能读,解决脏读
3)可重复读(虚读)事务A在修改,事务B不能读,但是事务A在增加记录,事务B还是可以读的造成虚读
4)序列化 事务A在修改和增加记录,事务B都不能操作
√: 可能出现 ×: 不会出现
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |