zoukankan      html  css  js  c++  java
  • 数据库事务隔离等级

    https://zh.wikipedia.org/wiki/%E4%BA%8B%E5%8B%99%E9%9A%94%E9%9B%A2

    总所周知,数据库事务有四个特性,原子性,一致性,隔离性,持久性。下面具体谈谈隔离性。

    隔离性与事务并发紧密联系在一起。而隔离级别又与并发速度相关,隔离级别高,必然影响并发速度;隔离级别低,速度虽然提升,但可靠性又会有问题。

    因此,现实中要根据具体情况做出权衡。不像某无脑游戏,强者各方面都强,更不像某意淫小说,天下好事尽在我手。现实就是,有得必有失。

    废话不说,隔离的四个级别,由高到低分别是:

    1,可序列化: 事务执行完前,读锁写锁一直保持。select时获得范围锁。最强隔离等级。解决幻读,不可重复读,脏读等问题。

    2,可重复读:事务执行完前,读锁写锁一直保持。但select时不获得范围锁。解决不可重复读,脏读问题。无法解决幻读。

    3,提交读:事务执行完前,写锁一直保持。解决脏读问题。无法解决不可重复读,幻读。

    4,未提交读:最低的隔离级别。允许“脏读”,事务可以看到其他事务“尚未提交”的修改。

    什么是幻读呢?

    就是事务执行时,两次完全相同的查询操作得到不同的结果。

    主要是没有获得范围锁,读时,被插入了一条新数据。虽然有读锁,写锁,但仍会出现此问题。

    什么是不可重复读?

    主要是,读锁没有一直保持,导致读时被插入新值。注意是值级别,幻读是表级别,被插入新行。

    什么是脏读?

    主要是写锁没有一直保持,读时出现读取修改但未提交的数据。

    Oracle默认隔离级别:提交读;MySql默认隔离级别:可重复读。

    可见凡事不可求全。对于一个工程人员来说,实际最优与理论最优永远有差距。

  • 相关阅读:
    MYSQL InnoDB二级索引存储主键值而不是存储行指针的优点与缺点
    公众号 苹果端点击事件委托不起作用而安卓可以
    php emoji表情转换
    PHP 获取网页所有链接
    node 一行一行的读取文件
    AsyncJS 异步流程控制DEMO详细介绍
    node.js 获取异步方法里面数据 的方式
    利用blob 加密防下载
    html css 3D轮播图
    transform和transition组合动画错误问题
  • 原文地址:https://www.cnblogs.com/zqiguoshang/p/7417007.html
Copyright © 2011-2022 走看看