本章学习目标
- 事务的相关概念
- Hibernate 的隔离级别配置(了解)
- 使用 ThreadLocal 管理 Session(重点)
1. 事务相关概念
典型事务例子:转账
张三 转账 给 李四 1000 元
账户表: t_account
id name money
1 张三 5000
2 李四 5000
转账业务的底层是两条 SQL 语句:
update t_accuont set money=money-1000 where id=1;
发生异常
update t_accuont set money=money+1000 where id=2;
这时,转账业务必须加上事务!!!
1.1 事务的四个特征
原子性:事务要么一起成功,要么一起失败!
一致性:事务操作应该保证数据库的数据操作前后是一致的
隔离性:并发的事务需要相互隔离
持久性:事务一旦提交,数据应该永久保存。
1.2 并发事务会存在的问题
-
脏读: 一个事务读到另一个并发事务的未提交的数据。
-
不可重复读:一个事务读到了另一个并发事务的 update 数据。
-
幻读:一个事务读到了另一个并发事务的 insert 数据。