Java数据进阶知识(三)事务(面试常问点)

Java数据进阶知识(三)事务(面试常问点)

介绍

事务是指:组成事务的一组操作,假如这个操作中有很多操作单元,组成这个操作的各个单元要么在执行时都成功,要么都失败。

事务的使用

  • API
//开启事务  false:是否开启自动提交
connection.setAutoCommit(false)
//提交事务
connection.commit();
//回滚事务
connection.rollback();
  • 命令
# 开始事务
start transaction;
# 提交事务
commit;
# 回滚事务
rollback();

事务的特性

  • 原子性

事务是一个不可分割的单元,事务中的操作,要么都成功,要么都失败

  • 一致性

事务必须使一个数据从一个一致性状态到另外一个一致性状态

  • 隔离性

事务与事务之间是相互隔离的,互不影响。 数据库有为隔离性设置不同的隔离级别。不同的隔离级别对隔离性的影响是不用的。

  • 持久性

一个事务一旦生效,对数据路的改变是永久性的,不可逆转的。意思就是事务提交后,就已经产生的数据的变化 无法回滚。

隔离级别

四种隔离级别可能产生的问题:

  • 脏读: 一个事务读取到了另外一个事务未提交的数据
  • 不可重复读: 同一个事务中,读同一个数据,前后读取的数据不一致。一般指:一个事务读取到了另外一个事务已提交的数据
  • 虚幻读: 同一个事务中,读同一个数据,前后读取数据数量不一致。 一般指:一个事务读取到了另外一个事务插入或删除的操作

读未提交

image
image

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

读已提交

image
image

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

可重复读

image
image
image

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

序列化

image

总结:这是最严格的个隔离级别。在串行化隔离级别下,所有事务都是依次执行的,不存在并发执行的情况。没有脏读、不可重复读、虚幻读的问题。

脏读 不可重复读 虚幻读
读未提交(read uncommitted)
读已提交(read committed) X
可重复读(repeatable read) X X
串行化(serializable) X X X
posted @ 2022-05-26 21:17  向着年薪百万前进  阅读(96)  评论(1)    收藏  举报