解决数据库高并发数据脏读问题-全面理解数据库事务ACID特点

本文主要是介绍解决数据库高并发数据脏读问题-全面理解数据库事务ACID特点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是事务

  MySQL事务只要勇于处理操作量大,复杂度高的数据。 比如:在管理系统中删除一个人员的基本资料,也要删除人员的相关信息,文件,邮箱等等,这些数据库的操作语句就构成了一个事务。一个事务是一个只包含所有读/写操作成功的集合。叫做事务
在这里插入图片描述
一个事务的本质上有四个特点:ACID,当然ACID为简称如下:

  • A:Atomicity原子性
  • C:Consistency一致性
  • I : Isolation隔离性
  • D:Durability耐久性
原子性(Atomicity):

  原子性任务是一个独立的操作单元,是一种要么全部都是,要么全部都不是的院子单位性操作,啥意思? 就是 事务要么发生,要么就不发生。

有两个用户:zhangsan和lisi,在zhangsan账户中有1000元的人民币,lisi账户中有200元的人民币,当zhangsan用户给lisi用户转账100元人名币,相当于 zhangsan 1000-100=900 lisi 200+100=300, 原子性表示,要么这两个步骤同时成功,zhangsan转账lisi zhangsan减钱,lisi增钱,要么一起失败。 不然只发生其中一个动作。

一致性(Consistency):

在事务开始之前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,在zhangsan账户中有1000元的人民币 ,lisi账户中有200元的人民币 当zhangsan用户给lisi用户转账100元人名币,相当于 zhangsan 1000-100=900 lisi 200+100=300,转账成功,一致性表示事务完成后,符合逻辑运算,肯定不能zhangsan向lisi转钱了,zhangsan减钱,lisi没增钱…

隔离性(Isolation):

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时,由于交叉执行而导致数据的不一致。 事务隔离分为不同的级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。针对多个用户同时操作,主要是排除其他事务对本次事务的影响。
在这里插入图片描述

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

在mysql中默认的事务级别为repeatable-read(可重复读)
在这里插入图片描述

读未提交(read-uncommitted):

打开一个客户端将mysql默认REPEATABLE-READ改为:read-uncommitted

select @@tx_isolation; # 查看当前的事务级别
set session transaction isolation level read uncommitted; # 设置事

这篇关于解决数据库高并发数据脏读问题-全面理解数据库事务ACID特点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667173

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常