数据库隔离级别与常见问题

常见的事务问题

  • 脏读

    一个事务读取了另一个事务修改但未提交的数据,。

  • 不可重复读

    在同一事务中,同一个查询读取某行,在time1获取到某行,在time2重新读取时发现该数据发生修改,可能被更新或删除

  • 幻读

    在同一事务中,同一个查询多次执行,由于其他插入操作的事务提交,导致返回不同结果集。

    区别:

    • 脏读与不可重复读

        脏读:某事务读取另一事务未提交的脏数据。

        不可重复读:同一事务内查询返回不同结果。

    • 幻读与不可重复读

        幻读:主要针对数据整体,insert操作。

        不可重复读:主要针对同一数据项,delete或update操作。

 

事务四大特性(ACID)

  • 原子性

    事务中的操作不可再分割,这些操作要么全部成功,要么全部失败。

  • 一致性

    事务的执行不能破坏数据库的完整性和一致性,一个事务在执行前和执行后,数据库都必须处于一致性状态。

  • 隔离性

    并发操作时,不同事务之间互相隔离、互不干扰。

  • 持久性

    一旦事务提交,则事务中的数据操作需要被持久化到数据库中。

 

四种隔离级别(隔离强度从高到低,并发性能从低到高)

  • 串行化(Serializable)

    最高的隔离级别,强制事务排序,强制事务串行执行,使其不可能发生冲突。即在每个读的数据行加上共享锁。

    可能导致大量的超时现象和锁竞争。

    可防止脏读、不可重复读、幻读。

  • 可重复读(Repeated Read)

    确保同一个事务,在多次读取同样数据时,得到同样结果。

    可防止脏读、不可重复读。

    MySQL默认隔离级别为可重复读。

  • 读已提交(Read Committed)

     一个事务只能看见已提交事务所作的改变。

    可防止脏读。

    绝大多数数据库的默认隔离级别均为读已提交,例如Oracle、SQL Server、PostGre。

  • 读未提交(Read Uncommitted)

    所有事务都可以看到其他未提交事务的执行结果。

    并发性能最高,但会产生脏读、不可重复读、幻读。

 

Spring的事务隔离级别

  spring隔离级别就是数据库的四大隔离级别。spring默认隔离级别与数据库隔离级别一致。

 

posted @   夏笠  阅读(217)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示