ACID讲解,ACID简介

2024-08-22 05:18
文章标签 讲解 简介 acid

本文主要是介绍ACID讲解,ACID简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ACID:保证数据库事务的完整性提出的理论。

A(Atomicity):原子性,一个事务要一起完成,要么一起失败,不能因为中途一些错误导致数据一部分写入成功,一部分写入失败,失败就要回滚。

C(Consistency):一致性,指的是数据状态一致性,就比如一次性操作三个数据状态为1的数据,给他们加2,一致性就代表三个数据都要等于3,如果一个等于3,二个还等于1就是违反一致性。

I(Isolation):隔离性,指的是事务之前的隔离性,比如A事务和B事务同时在运行,它们直接不能产生联系和影响,不然就是违反隔离性,隔离性产生如下四种隔离级别:

             1.读未提交:很好理解,就是A事务和B事务都在操作数据,A操作一个字段的数字不停的叠加叠加,B正好也在操作,这个时候B就能读取到A叠加且未提交的数据,要点就在于事务中的数据在事务未提交的时候也可以被读取到。

              2.读已提交:很好理解,与读未提交相反,读取的数据一定是其他的事务提交过后的数据,没提交的不会被读取到。

              3.可重复读:指的是在事务开始前我读取了数据A等于1,那在本事务的后续读取A的过程中他的值还是A,这样子就避免了脏读(读取到读未提交又发生了回滚的数据)和不可重复读(第一次和第二次读取的数据不一致)的问题,但是就会产生幻读(提交前查到数据是A,提交后查到是B)的问题,具体解决幻读的方案可以查询Mysql的解决方案作为参考。

               4.串读:安全级别最高也是效率最低的方案,就是必须让事务排队操作,A操作完B才能操作,不能采用高效率的多线程或者并发操作。

 

D(Durability):持久性,很好理解了,就是数据一旦提交就比如实现持久化了,继续后续系统发生了故障、断电断网数据都不会丢失。

 

总结:

                 1.我们以Mysql数据库的InnoDB的隔离级别可重复读来做一个扩展,InnoDB是怎么解决幻读的了,第一个是gap锁,就是写的锁,比如A写入id = 1,3,4这三条数据的时候会给这三条数据加锁,B想写入就会阻塞,第二个就是快照度和当前读的两个问题了,快照读很好理解,就是我读取的是啥我写入的时候就按我们读取的写入,当前读就是我当前读取的多少就写入多少,快照读因为MVCC(版本号)能解决幻读的问题,因为是我读取了多少我就修改了多少,但是在当前读的情况下next-key间隙锁来解决幻读问题,总结的内容可能不是太恰当,有不同想法的可以留言。

这篇关于ACID讲解,ACID简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1095345

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ