Java数据库篇5——事务
1、什么是事务
事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有 一条SQL出现异常,整个操作就会回滚,整个业务执行失败
2、事物的特征
- 原子性:事务是不可再分的最小的操作单位
- 一致性:事物操作前后总量不变
- 隔离性:各个事务的执行互不干扰
- 持久性:持久性指事务一旦提交,对数据所做的任何改变,都要记录到存储器中
3、 事务隔离级别
3.1、并发产生的问题
并发问题 | 描述 |
---|---|
脏读(Dirty read) | 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,使用了这个数据 |
不可重复读(Unrepeatableread) | 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样 |
幻读(Phantom read) | 幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样 |
不可重复读和幻读区别:不可重复读的重点是修改,幻读的重点在于新增或者删除
3.2、事务隔离级别
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库的默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | ✔ | ✔ | ✔ | |
2 | 读已提交 | read committed | ✘ | ✔ | ✔ | Oracle和SQLServer |
3 | 可重复读 | repeatable read | ✘ | ✘ | ✔ | MySql |
4 | 串行化 | serializable | ✘ | ✘ | ✘ |