通俗理解数据库隔离机制

PerKinsZhu PerKinsZhu     2022-08-30     632

关键词:

===========================================

    原文链接: 通俗理解数据库隔离机制   转载请注明出处!

===========================================

     在理解数据库隔离机制的时候发现网上很多文章都是千篇一律,解释语言太过于标准书面化,描述的晦涩难懂,因果关系模糊。在这里将自己对隔离机制的理解描述一下,力争做到能够通过浅显的语言描述出来。

     数据库隔离机制是对于多线程同时操作数据库而言的。对于单线程操作数据库不存在所谓的隔离,也不需要进行隔离。这里需要注意一点【操作数据库】这里要注意区分这个操作是读取或者修改已存在的数据,还是插入删除新的数据。

数据库隔离机制四种:

1、未提交读(Read Uncommitted)

  自定义名称修改级别隔离(只要修改了数据,则其他事务就可以看到)

  可以理解为:A事务只要修改了数据,无论有没有提交,其他事务都能够读取到A事务修改后的结果。

  潜在问题【对于同一记录进行修改操作:A事务修改之后未提交,B事务读取到修改之后的数据,然后在这个基础上进行操作修改并提交。然后A提交失败,数据回滚,则数据就出现异常。这就是所谓的脏读

  解决方案:A事务提交之后B事务才能读取到A修改之后的数据,不让读取修改但未提交的数据

2、提交读(Read Committed)

   自定义名称:提交级别隔离(只有成功提交事务,则其他事务才能够看到

  可以理解为:A事务成功commit之后,其他事务才能够读取到A提交事务之后的最新数据,否则只能读取到A提交之前的原始数据。这样就解决了脏读问题。

  潜在问题【对于同一记录进行修改操作】:A事务开启第一次读取数据,然后B事务开启对数据进行了修改并提交成功, 此时A事务还没有结束,又进行了一次读操作,然后便发现A事务中的两次读取的数据不一致。这就是所谓的不可重复读。同一个事务中两次读取的数据不一样。【这里有一个问题我也没搞明白,为什么在同一个事务中我要对同一条记录读取两次或者多次呢?我读一次存储在缓存中不就可以了?什么情况下会发生需要读两次的的情况?应用场景有哪些?有理解的朋友还望告知!】

   解决方案:在一个事务对该行数据进行操作的时候,其他事务不允许进行修改。可以理解为添加一个行级别的锁

3、可重复读(Repeatable Read)

  自定义名称事务级别隔离(A事务中的数据不会受B事务中的修改操作影响,即使B事务提交之后,A事务再次查询的数据也不会发生变化)

  可以理解为:在自己的事务中复制了一套相关的数据,该数据是私有的不受其他事务的影响。因此可以解决不可重复读的问题。这里虽然解决了不可重读的问题,但是却没有解决数据覆盖的问题,也就是B操作的数据是最原始的数据(和A未修改之前的数据一样),而并不是最新(A修改之后的数据)的数据。对于此隔离机制无法解决这个问题,需要使用行级锁来进行处理。

  潜在问题【对于同表进行插入或删除操作】:A事务插入/删除了一条记录,但是B事务中却查询不到插入的新记录/依旧能查到删除的记录。这就是所谓的幻读。幻读是对于记录条数而言的,不是针对于某一条记录的数据而言的。这里需要注意!

  解决方案:在有事务对该表进行操作的时候,不允许其他事务操作该表。添加表级锁。

4、串行读(Serializable)

  自定义名称表级别隔离(不允许同时有多个事务操作该表)

  可以理解为:所有的事务串行操作该数据表。这样就可以解决幻读操作。

  潜在问题:数据安全了 但是操作效率降低了。

  解决方案:…………

四种隔离机制就是这样子,潜在的问题分别为:脏读,不可重复读,幻读和效率低下。脏读、幻读和效率低下的问题都能够很好的理解,可是不可重复读为什么也是个需要避免的问题呢?为什么在同一个事务中需要两个读取同一条数据呢?这个不太明白……

理解的时候不要看所谓的“读未提交”、“提交读”、“可重复读”和“串行读”,这只是描述了一种读取方式,并不算是一种隔离机制(个人理解)。

 

------end

 

浅谈innodb存储引擎的mvcc机制(代码片段)

文章目录一、数据库事务隔离级别1、事务原则2、4种隔离级别3、会出现的3种问题二、MVCC概念1、基本结构2、字段介绍3、read-view4、MVCC机制理解一、数据库事务隔离级别1、事务原则事务需要满足ACID原则:原子性A一致性C隔离... 查看详情

事物再次深刻理解

...(同一条数据,一个范围内数据)就叫并发事务。3.mysql:数据库层面使用不同的事务隔离级别来进行并发事务的控制,不同的隔离级别是因为数据库中内部锁机制的使用方式不同,例如有的是在select完成之后立马释放锁,有的是... 查看详情

socket通俗理解

摘自百度知道 TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发... 查看详情

探索存储机制(1-9)

...于8046bytes的行,RCSI/SI事务隔离级别无效SQLServer存储(8/8):理解数据文件结构SQLServer存储(7/8):理解BCM页SQLServer存储(6/8):理解DCM页SQLServer存储(5/8):理解IAM 查看详情

面试官问我谈谈对事务隔离机制的理解?我是这样回答的(代码片段)

...上车!说到事务,相信你一定不会陌生,在与数据库打交道的时候,我们总是会用到它。以转账为例,你要给朋友小张转账100元,而此时的银行卡余额至少要有100元。在转账过程中,程序会有一系列的... 查看详情

sqlserver的四个事务隔离级别到底怎么理解?(代码片段)

...头转向,其实事务的本质就是隔离,落地就需要锁机制,理解这四种隔离方式的花式加锁,应该就可以入门了,那如何可视化的观察锁过程呢?这里借助SQLProfile工具。二:四种事务隔离方式1.测试数据准备还是用上一篇创建的pos... 查看详情

事务隔离机制

...坛上有过一次提问,如下: 下面两个问题的答案就是数据库的事务隔离机制。数据库针对外部的并发请求,也是要考虑资源抢占问题的,所以数据库针对同一记录的写请求,也是要加锁的!最简单的方式就是针对每个请求都... 查看详情

数据库的隔离级别

一、数据库是什么?  数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。二、为什么会需要隔离机制?    通过数据库定义的理解,换句话说就是,数据是以一种文件... 查看详情

数据库的隔离级别

一、数据库是什么?  数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。二、为什么会需要隔离机制?    通过数据库定义的理解,换句话说就是,数据是以一种文件... 查看详情

锁定机制(悲观/乐观)如何与数据库事务隔离级别相关?

】锁定机制(悲观/乐观)如何与数据库事务隔离级别相关?【英文标题】:Howarelockingmechanisms(Pessimistic/Optimistic)relatedtodatabasetransactionisolationlevels?【发布时间】:2014-05-0323:36:00【问题描述】:我正在编写一个Web应用程序,其中两... 查看详情

mvcc事务隔离机制

数据库隔离机制可以参考以下链接:https://www.cnblogs.com/linhaifeng/articles/14387903.htmlmvcc事务隔离机制:在MVCC并发控制中,读操作可以分成两类:快照读(snapshotread)与当前读(currentread)。快照读,读取的是记录的可见... 查看详情

事务隔离机制

数据库隔离机制,要看事务!!!(两个事务读到的数据不一致不能算脏读什么的,只能是同一个数据读到的不一致。或者你一个读取的事务插到人家正在update的事务中了就是脏读。)先说几个并发时候容易出现的问题:1、更新丢... 查看详情

容器cpu隔离的底层实现机制

...略要严格的多,因而需要对于Linux内核底层机制有所理解,才能很好的做CPU隔离,甚至在离线业务混合部署隔离等策略。本文不打算讲述Cgroup的使用层原理,因为这类文章已经比较多了,而是希望从更深层的原... 查看详情

15分钟理解https——通俗篇

|导语 它很深奥吗?你肯定常常见过它,使用它,甚至离不开它...它很浅显吗?你可能觉得看透它,理解它,甚至懂它...让我们用15分钟,不那么学术地将它的深挖到底~ 什么?如何证明我是我?本文要上升到这样的哲学... 查看详情

深入理解jvm自动内存管理机制

2.1C、C++内存管理是由开发人员管理,而Java则交给了JVM进行自动管理2.2JVM运行时数据区:方法区、堆(运行时线程共享),虚拟机栈、本地方法栈、程序计数器(运行时线程隔离,私有)  2.2.1程序计数器(ProgramCounterRegister):每一... 查看详情

rabbitmq-理解消息通信-虚拟主机和隔离

每个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(vhost)每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑定等等更重要的是,他拥有自己的权限机制,这使得你能够安全地使用一个Rabb... 查看详情

数据事务四种隔离机制和七种传播行为

一、隔离级别:数据库事务的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离... 查看详情

数据事务四种隔离机制和七种传播行为

一、隔离级别:数据库事务的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离... 查看详情