zoukankan      html  css  js  c++  java
  • 数据库事务的4种隔离级别

    参考:MySQL的四种事务隔离级别
    参考博文中给出了不错的举例,但也有不足之处。

    四种隔离:

    1.read uncommitted

    问题:会读到另一个事务未提交的数据,发生脏读

    2.read committed

    解决:避免了脏读
    问题:如果在事务过程中,另一个事务更新(update)并提交(commit)了数据,这边读到的数据会随之更新,导致前后不一致,此现象叫不可重复读,意思为读不到重复(前后一致)的值;

    3.repeatable read

    解决:避免了脏读和不可重复读。

    如果在事务过程中,另一个事务更新(update)并提交(commit)了数据,这边的实际内容和read committed模式下一样发生了变化,但在显示时不进行更新,显示历史版本的旧值。

    问题:另一个事务如果插入了(insert)新行时,当前事务是接收到但是看不到(select)的,操作如果有冲突(如主键重复)会提示你这边已经有数据,好像发生幻觉一样,称为“幻读”。

    4.serializable

    串行化 没有啥问题,就是必须一个事务commit之后另一个事务才能进行写入操作,并发性很差。

    其他

    隔离程度越高,并发性能越差
    默认repeatable read

    吐槽:

    个人感觉不可重复读这个问题不能算作问题,为此专门搞出的repeatable read模式在数据已经发生实质性改变的情况下还用原来的值来显示,是对变化的视而不见。
    举个例子,事务B将id=1的数据删除,事务A这边还留有id=1的数据“残影”来用于显示,而对于id=1数据的任何操作都是无用功,不会有回应。

    MYSQL设置语句

    select @@global.transaction_isolation;  --查询全局事务隔离
    select @@transaction_isolation;  --查询会话事务隔离
    
    set global transaction isolation level XXXXX;  --修改全局事务隔离
    set transaction isolation level XXXXX;  --修改会话事务隔离
    

    设置完之后要exit数据库,然后重新登录,至少我这 win10+MySQL 8.0.21不这样不行。

  • 相关阅读:
    UOS ROOT如何SSH登陆
    UOS打印日志提示Can’t create temporary file,无法打印如何处理
    UOS简易OEM ISO镜像的步骤(UOS如何自行定制镜像文件)
    UOS火狐浏览器如何下载并安装Adobe Flash Player插件【AMD】
    UOS如何录制屏幕视频
    UOS怎么进入到单用户模式
    UOS免密访问windows共享文件夹
    UOS命令行服务器离线授权码激活步骤
    UOS怎么安装搜狗拼音输入法【x86】
    UOS如何安装RTX客户端-更新版(X86)
  • 原文地址:https://www.cnblogs.com/j-c-y/p/13618512.html
Copyright © 2011-2022 走看看