我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL事务与并发

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL事务与并发

MySQL事务与并发

  很多程序员都学过MySQL,而且也会写SQL语句。但仅仅会写还远远不够,在面试中以及在工作中,还必须要会事务和并发。

一、事务

事务是满足 ACID 特性的操作,可以通过 Commit 提交事务,也可以使用 Rollback 进行回滚。 A(Atomicity)原子性:事务被视为不可分割的小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 C(Consistency)一致性:数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。 I(Isolation)隔离性:事务之间的操作是相互隔离的。 D(Durability)持久性:一旦事务提交,则其所做的修改将会永远保存到数据库中。

二、并发一致性

在并发环境下,容易造成并发一致性问题,导致隔离性被破坏。假设目前有两个事务,分别命名为A和B,在并发环境下,容易出现以下问题。 丢失更新:A、B同时修改数据,A先,B后,A提交后B提交,B操作覆盖了A的操作,导致A丢失更新。 读脏数据:A修改数据,B读取数据;随后A撤销操作,则B读到脏数据。 不可重复读:B读取数据,A修改数据,B再次读取数据,发现数据和第一次读时不一致。 幻读:A读取了某个范围的数据,B在此范围内插入一条数据;A再次读取,结果不一样。

三、锁

在并发环境下,为解决并发一致性问题保证事务的隔离性,可采取封锁机制。当一个事务在进行操作时加锁,限制另一个事务的操作。 一般而言,为保证效率,锁的粒度不宜太大。在MySQL中,提供了行锁表锁 行锁:事务A操作数据时,只封锁被操作的行,事务B可以操作其他行的数据,并发程度高; 表锁:事务A操作数据时,封锁整个表,事务B要等A完成才能操作,并发度较低。   在读写方面数据库锁也分为读锁(共享锁)写锁(排他锁) 读锁:若事务A加了此锁,A可以对数据进行读取操作,但不能更新;其它事务也可以读,但不能修改; 写锁:若事务A加了此锁,A可以对数据进行读和写操作,其它事务不能读写,否则会阻塞。   上面所说的是悲观锁,MySQL中InnoDB也提供了乐观锁的实现——MVCC(多版本并发控制)。用通俗的方式解释悲观锁和乐观锁大概是这样: 悲观锁:认为每次操作都会修改数据,每次都在操作前上锁;​ 乐观锁:认为每次操作都不会修改数据,不上锁,但是会记录一个版本号或者时间戳,用来对比。 MVCC则是乐观锁的实现,它在每行记录后面都保存着两个隐藏的列,用来存储创建版本号删除版本号

四、隔离级别

若锁的操作要用户自己控制,会比较复杂,因此数据库管理系统提供了事务的隔离级别,使问题简单化。MySQL的隔离级别有四种,分别是:未提交读、已提交读、可重复读、可序列化。它们与并发一致性问题的关系如下表所示。MySQL默认隔离级别为:可重复读 未提交读:事务修改数据,即使未提交,其它事务依旧可见。 已提交读:事务修改数据提交之前,其他事务不可见。 可重复读:事务多次读取数据的结果都一样。 可序列化:解决了幻读问题。

五、存储引擎

说到数据库的并发问题,就要提一下MySQL的存储引擎。MySQL的存储引擎有很多种,最常用的还是MyISAMInnoDB,它们的区别如下: 因此,一般在读操作比较多的情况下,MyISAM的效率更高,因为相比于InnoDB,它维护的东西要少,比如版本号,索引数据等。 但是InnoDB支持事务,而且在并发环境下优势显著。至于如何选择存储引擎,应根据具体情况而定。

总结

本文讲了数据库的事务以及并发一致性问题,并且引申出解决办法以及MySQL的存储引擎。这些知识,对于绝大多数从事互联网工作的人来说,是必须要掌握的,也是在面试中经常考察的点。  

如果觉得对你有帮助,可以关注公众号:Max的日常操作,或扫码关注

                          


   

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL事务与并发

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL事务与并发

很多程序员都学过MySQL,而且也会写SQL语句。但仅仅会写还远远不够,在面试中以及在工作中,还必须要会事务和并发。一、事务事务是满足 ACID 特性的操作,可以通过 Commit 提交事务,也可以使用 Rollback 进行回滚。A(Atomicity)原子
MySQL事务与并发
2019-06-24

并发事务问题与事务隔离级别

1.并发事务问题1)脏读:一个事物读到另一个事务还没有提交的数据。2)不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“
并发事务问题与事务隔离级别
2014-10-20

MySQL事务与并发控制的知识点有哪些

这篇文章主要介绍了MySQL事务与并发控制的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL事务与并发控制的知识点有哪些文章都会有所收获,下面我们一起来看看吧。事务概念一个事务可以理解为一组
2023-07-05

mysql中怎么实现并发事务

这篇文章将为大家详细讲解有关mysql中怎么实现并发事务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、更新丢失或脏写。当两个或两个以上的事务选择同一行,然后根据最初选定的值更新银行时,由
2023-06-20

Mysql事务并发问题解决方案

在开发中遇到过这样一个问题 一个看视频记录,更新到100就表示看完了,后面再有请求不继续更新了. 结果是:导致,里面很多数据出现问题. 推测是以下的情况才会导致 第一条请求 事务在执行中,还未提交(因为本地有时候比较难再现,于是手动在程序中
2022-05-15

mysql并发事务控制的过程介绍

本篇内容主要讲解“mysql并发事务控制的过程介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql并发事务控制的过程介绍”吧!1、单版本控制锁。锁以独占的方式确保事务在只有一个版本的情况
2023-06-20
2024-04-02

Boltdb学习笔记之三--事务与并发控制

如果说数据库是软件工程领域的皇冠,而事务与并发控制可称之为皇冠上的钻石。本节将详细分析boltdb中如何实现事务与并发控制 事务 事务定义 boltdb中使用Tx表示事务, 定义如下: // Tx represents a read-only or read/
Boltdb学习笔记之三--事务与并发控制
2021-06-02

MySQL分布式事务处理与并发控制的项目经验解析

MySQL分布式事务处理与并发控制的项目经验解析近年来,随着互联网的迅猛发展和用户数量的不断增加,对于数据库的要求也日益提高。在大型分布式系统中,MySQL作为最常用的关系型数据库管理系统之一,一直扮演着重要的角色。但是,随着数据规模的增大
MySQL分布式事务处理与并发控制的项目经验解析
2023-11-02

MySQL事务的ACID特性以及并发问题方案

目录一、事务的概念二、ACID特性三、事务并发存在的问题四、事务相关命令一、事务的概念一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中所有操作都正常执行完了,整个事务才会被提交给数据库,如果有部分事务
2022-07-14

MySQL事务与锁 - Mr

一、事务与事务特性在关系型数据库内,事务是由一个SQL或一组SQL语句组成的逻辑处理单元。也就是说事务就相当于一个盛放SQL的容器,事务中的SQL要么全部执行成功,要么所有已经修改的操作都回滚到原来的操作,即一条SQL也不能执行成功。事务的四大特性(ACID)
MySQL事务与锁 - Mr
2016-11-14

MySQL触发器与数据库事务的协调

MySQL触发器和数据库事务都是用于确保数据完整性和一致性的重要工具。它们之间的协调主要涉及到如何在触发器中正确处理事务,以及如何在触发器与其他事务之间保持数据的一致性。触发器与事务的基本概念MySQL触发器是一种自动执行的操作,当对某个表
MySQL触发器与数据库事务的协调
2024-09-26

Node.js 事件驱动编程与并发编程:携手并进,构建高并发系统

Node.js 事件驱动编程和并发编程是构建高并发系统的基础,它们携手合作,充分利用 CPU 资源,处理大量并发请求。本文将深入探讨这两种编程范式,并通过示例代码说明它们如何共同作用。
Node.js 事件驱动编程与并发编程:携手并进,构建高并发系统
2024-03-05

mysql 的读写锁与并发控制

1.无论何时只要有多个查询在同一时刻修改数据,都会产生并发控制的问题 2.讨论mysql在两个层面,服务器层和存储引擎层,如何并发控制读写 3.举了个mbox邮箱文件的例子,说如果有多个进程同时对mbox文件写东西,那么在文件的末尾会,交叉混乱的添加,比如进程
mysql 的读写锁与并发控制
2020-05-19

编程热搜

目录