[SQL系列] 从头开始学PostgreSQL 借鉴MYSQL的隔离级别

这篇具有很好参考价值的文章主要介绍了[SQL系列] 从头开始学PostgreSQL 借鉴MYSQL的隔离级别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL 的隔离级别是指在数据库中,事务之间相互隔离的程度。当事务 A 修改了某条数据后,如果事务 B 在这个时候读取该数据,会发生什么情况呢?这取决于数据库的隔离级别设置。
常用的事务隔离级别类型包括以下几种:

  1. READ UNCOMMITTED(读未提交):该隔离级别允许读取未提交的事务所做的修改,但未提交的事务不能读取已提交的事务所做的修改。因此,该隔离级别可能会导致脏读和不可重复读的问题。
  2. READ COMMITTED(读已提交):该隔离级别只允许读取已提交的事务所做的修改,而不能读取未提交的事务所做的修改。因此,该隔离级别可以避免脏读的问题,但是可能会导致不可重复读的问题。
  3. REPEATABLE READ(可重复读):该隔离级别允许读取已提交的事务所做的修改,并且同一个事务多次读取同一数据时,其结果保持一致。因此,该隔离级别可以避免不可重复读的问题,但是可能会导致幻读的问题。
  4. SERIALIZABLE(串行化):该隔离级别相当于所有事务都串行执行,可以避免所有的并发问题,但是会严重影响性能。

首先需要了解几个名词:

1. 脏读:在一个事务窗口中,没有数据修改提交前,另一个事务就可以看到内存中数据页的修改。也就是在事务窗口中可以读取到别人没有提交的数据信息。

比如事务A修改了一个数据,但是还没提交

事务B就读取到了这个修改的值

这时候事务A突然间roll back了

事务B就相当于读到了不存在的数据

2. 不可重复读:指的是在一个十五窗口内,最开始独到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况。

比如事务A多次读取一个数据,

事务B在其中更新了数据并且提交了

事务A的多次读取结果不一样。

3. 幻读:当事务不是独立执行时,一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。例如,第一个事务读取了表中的所有行,然后第二个事务插入了一行新数据,这导致第一个事务读取的数据行不完整,产生了幻读的现象。

两次select获取到的数量不一样,比如说第一次 select拿到了10行,第二次select有20行。

比如说,事务A第一次select数据时,拿到了5行数据

事务B在此时插入了5行

第二次事务Aselect数据时就拿到了10行数据,要是原本准备从第6行开始insert,这时候就会冲突

隔离级别  脏读 不可重复读 幻读
读未提交 发生      发生 发生
读已提交 不发生 发生 发生
可重复读 不发生 不发生 在next-key lock解决
串行读 不发生 不发生 不发生

对于读未提交来说,在事务中修改了数据还没提交但是却会被其他事务所看到

脏读不可避免,不可重复读也是,幻读也是

对于读已提交来说,在事务中修改了数据提交了才会被其他事务看到

脏读完全可以避免,但是如果重复读时正好提交就不对了,所以无法避免不可重复读和幻读

对于可重复读来说,可以避免脏读和不可重复读

Read View是MySQL在可重复读隔离级别下创建的一个视图,它为每个事务提供了一个一致性的数据快照。Read View记录了在事务开始时活跃的所有事务ID。通过Read View,事务可以读取到其他事务修改前的数据行,从而实现可重复读,是为mvcc服务的。

对于串行化,会将所有的事务都串行执行,就可以避免所有的并发问题,但是效率就很低了。文章来源地址https://www.toymoban.com/news/detail-614014.html

到了这里,关于[SQL系列] 从头开始学PostgreSQL 借鉴MYSQL的隔离级别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL系列】MySQL的事务管理的学习(一)_ 事务概念 | 事务操作方式 | 事务隔离级别

    「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 事务的概念 MySQL事务是指一系列的数据库操作(一组 DML 语句),这些操作要么全部成功执行,要么全部失败回滚。事务的目的是确保数据库的一致性和完整性 事务就是要

    2024年02月09日
    浏览(35)
  • mycat设置sql隔离级别的问题

    General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。 该语句会引起两个问题, 1: \\\"REPEATABLE READ\\\"不是我们预期的事物隔离级别。 2: 大量无效的SQL影响性能。 注: MySql的可重复读会带来怎样的问题,可以参考该文章。https://www.jianshu.com/p/f7360d259878 排查过程涉及

    2024年02月16日
    浏览(47)
  • 【MySQL】事务及其隔离性/隔离级别

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、事务的概念 1、事务的四种特性 2、事务的作用 3、存储引擎对事务的支持 4、事务的提交方式 二、事务的启动、回

    2024年02月12日
    浏览(47)
  • Mysql 索引 、事务、隔离级别

    目录 索引(index) 1.为什么要有索引? 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引是一种为了加快数据库查询(操作)速度而引入的一种手段,需要占用额

    2024年01月20日
    浏览(59)
  • 详解MySQL事务隔离级别

    一个事务具有 ACID 特性,也就是(Atomicity、Consistency、Isolation、Durability,即 原子性 、 一致性 、 隔离性 、 持久性 ),本文主要讲解一下其中的 Isolation ,也就是事务的 隔离性 。 概述 四种隔离级别分别是: 读未提交(Read Uncommitted) :最低的隔离级别,事务对数据的修改即使

    2024年02月09日
    浏览(50)
  • 【MYSQL】事务隔离级别

    脏读 一个事务正在对一条记录做修改,在这个事务完成并提交前,另一个事务也来读取同一条记录,读取了这些未提交的“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象的叫作’脏读’(Dirty Reads)。 例子:事务A修改了一条数据1状态

    2024年01月19日
    浏览(40)
  • MySQL的事务隔离级别

    目录 事务隔离级别的概念 脏读(Dirty Read): 不可重复读(Non-Repeatable Read): 幻读(Phantom Read): 读未提交(Read Uncommitted) 读未提交隔离级别的特点 示例 优势和劣势 读已提交(Read Committed) 读已提交隔离级别的特点 示例 优势和劣势 可重复读(Repeatable Read) 可重复读隔

    2024年02月09日
    浏览(48)
  • 探索MySQL隔离级别

    数据库事务的隔离级别是一个重要的概念,它定义了一个事务可能受其他并发事务影响的程度。MySQL提供了四种标准的隔离级别,每个级别都以不同的方式平衡了一致性和性能。本文将详细介绍这些隔离级别,并提供相应的示例。 概念: 这是最低的隔离级别,允许一个事务可

    2024年02月02日
    浏览(29)
  • 【MySQL】事务与隔离级别详解

    事务就是一组DML语句组成 ,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体(原子性)。例如买票操作,上层看来是一个单纯的买票操作,但是下层却需要一条或多条SQL语句来完成转账操作,这一组SQL是一个整体,被称为事务。事务还

    2024年02月15日
    浏览(48)
  • MySQL的四个隔离级别对比

    最近在看MySQL的常见面试题, 简单记录一下. 主要为了保证ACID中的隔离性, 一致性是目的. 原子性, 隔离性, 持久性都是手段. 隔离级别 脏读(Dirty Read) 幻读(Phantom Read) 不可重复读(Non-repeatable Read) Read Uncommitted 可能发生 可能发生 可能发生 Read Committed 不会发生 可能发生 可

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包