Java数据进阶知识(三)事务(面试常问点)
Java数据进阶知识(三)事务(面试常问点)
介绍
事务是指:组成事务的一组操作,假如这个操作中有很多操作单元,组成这个操作的各个单元要么在执行时都成功,要么都失败。
事务的使用
- API
//开启事务 false:是否开启自动提交
connection.setAutoCommit(false)
//提交事务
connection.commit();
//回滚事务
connection.rollback();
- 命令
# 开始事务
start transaction;
# 提交事务
commit;
# 回滚事务
rollback();
事务的特性
- 原子性
事务是一个不可分割的单元,事务中的操作,要么都成功,要么都失败
- 一致性
事务必须使一个数据从一个一致性状态到另外一个一致性状态
- 隔离性
事务与事务之间是相互隔离的,互不影响。 数据库有为隔离性设置不同的隔离级别。不同的隔离级别对隔离性的影响是不用的。
- 持久性
一个事务一旦生效,对数据路的改变是永久性的,不可逆转的。意思就是事务提交后,就已经产生的数据的变化 无法回滚。
隔离级别
四种隔离级别可能产生的问题:
- 脏读: 一个事务读取到了另外一个事务未提交的数据
- 不可重复读: 同一个事务中,读同一个数据,前后读取的数据不一致。一般指:一个事务读取到了另外一个事务已提交的数据
- 虚幻读: 同一个事务中,读同一个数据,前后读取数据数量不一致。 一般指:一个事务读取到了另外一个事务插入或删除的操作
读未提交


总结:读未提交有脏读、不可重复读、虚幻读的问题 是最不安全的隔离级别
读已提交


总结:读已提交解决了脏读的问题 但仍然存在不可重复读与虚幻读的问题
可重复读



总结:数据库的默认隔离级别,没有脏读、不可重复读的问题,解决了部分虚幻读的问题 ,但是没有完全解决。
序列化

总结:这是最严格的个隔离级别。在串行化隔离级别下,所有事务都是依次执行的,不存在并发执行的情况。没有脏读、不可重复读、虚幻读的问题。
| 脏读 | 不可重复读 | 虚幻读 | |
|---|---|---|---|
| 读未提交(read uncommitted) | √ | √ | √ |
| 读已提交(read committed) | X | √ | √ |
| 可重复读(repeatable read) | X | X | √ |
| 串行化(serializable) | X | X | X |
本文来自博客园,作者:向着年薪百万前进,转载请注明原文链接:https://www.cnblogs.com/likangnianxinbaiwan/p/16315269.html

浙公网安备 33010602011771号