关于数据库事务的学习笔记

事务指的是数据库事务,事务指的是一个作为单个工作单元执行的一系列操作,它遵循ACID属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。事务确保了即使在系统故障的情况下,数据库操作要么完全完成,要么完全不发生,从而保证数据的完整性和一致性。

2023/11/27

1.数据操作的几大问题

        脏读:脏读发生在一个事务读取了另一个事务未提交的数据。

        不可重复读:不可重复读是指在同一个事务内,多次读取同一数据集合时,由于其他事务的修改,后续的读取结果与前面的不一致。

        幻读:幻读类似于不可重复读,但它涉及到新增或删除操作,而不是更新操作。幻读发生在一个事务读取了一系列记录后,另一个并发事务插入或删除了一些记录,导致第一个事务在再次读取这个系列时,发现了之前不存在的“幻影”数据。

当我们在JAVA类或方法中开启@Transactional注解,我们的数据操作要么全部完成,要么全部回滚,保证事务的原子性和一致性

2.数据库事务管理的隔离级别

  • 数据库的四种标准隔离级别包括:

  • 读未提交(Read Uncommitted)

    • 最低的隔离级别。
    • 允许事务读取尚未提交的更改,可能导致脏读。
    • 因为事务可能回滚,所以可能读到假数据
    • 锁:没有
  • 读已提交(Read Committed)

    • 允许一事务读取另一事务已提交的更改。
    • 防止脏读,但不可重复读和幻读仍可能发生。
    • 锁:设置共享锁(读锁)来防止别人读未提交的数据,读完之后放锁
  • 可重复读(Repeatable Read)

    • 确保在事务内多次读取同一数据的结果是一致的。
    • 防止脏读和不可重复读,但幻读可能发生。
    • 总结:在单个事务中读取的数据是一致的,不受并发操作的影响
    • 锁:长期共享锁(读锁),事务结束放锁
  • 串行化(Serializable)

    • 最高的隔离级别。
    • 完全隔离事务,防止脏读、不可重复读和幻读,但可能导致性能显著下降。
    • 事务之间顺序执行
    • 锁:读锁+写锁

在不开启事务的情况下MySQL 默认为 Repeatable Read。

当我们使用默认的@Transactional注解时,mysql的事务管理默认也是Repeatable Read。

如果要更改事务的隔离级别,可以通过注解指定的方式修改

@Transactional(isolation = Isolation.Serializable)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值