iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql事务并发问题解决方案
  • 181
分享到

Mysql事务并发问题解决方案

Mysql事务并发问题解决 2022-05-15 11:05:30 181人浏览 薄情痞子
摘要

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

开发中遇到过这样一个问题

一个看视频记录,更新到100就表示看完了,后面再有请求不继续更新了.

结果是:

导致,里面很多数据出现问题.

推测是以下的情况才会导致

第一条请求 事务在执行中,还未提交(因为本地有时候比较难再现,于是手动在程序中,第一条记录处理的时候,sleep了几秒,就达到这种效果了)

第二条请求 事务已经开始执行,这个时候查到的历史最大值不是100,才会去进行了更新

网上看了一下解决方案:

悲观锁

直接行记录

这个我在本地测试,确实有效,一个事务开始没结束,第二个事务一个等待,不过会导致处于阻塞状态,因为系统并发,不敢考虑,也就是记录下这个方式.

手动模拟:

执行第一个事务:


-- 视频100BEGIN;

SELECT * FROM `biz_coursestudyhistory` WHERE sid = 5777166;

UPDATE biz_coursestudyhistory set studyStatus = 100,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0;

-- commit ; 先不执行,先注解掉,只执行上面的

接着执行第二个事务:


BEGIN;
 
UPDATE biz_coursestudyhistory set studyStatus = 90,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0;
 
SELECT * FROM `biz_coursestudyhistory` WHERE sid = 1 FOR UPDATE;
 
COMMIT;

会发现成功不了,一直处于等待状态.

查看锁

确实被锁住了,这里只要执行第一个事务的commit ,第二个事务就会执行.

从这里可以看出,行锁可以直接达到理想的数据统一状态,一个事务修改,其他都不能操作,感觉这种比较适合银行这种安全性的项目

乐观锁:

这种比较简单,并且不会造成阻塞

方式就是加上版本号

var maxver = select max(version) from table

更新的话使用

update table set studystatus = xxx,version = version +1 where id =1 and version = maxver

写入的话


INSERT into table (contentStudyID,courseWareID,studyStatus,studyTime,endTime)
SELECT 27047358,3163,100,333,NOW() FROM dual WHERE NOT EXISTS (SELECT 1 FROM table WHERE contentStudyID =27047358 AND
courseWareID = 3163
 )

这种方式,可以在更新或者写入的时候,直接判断库里面存在的数据是否存在,如果不存在则是别其他的线程使用了.

修改为这种写法后,使用jmeter进行多线程测试,从最开始的多条记录更新成功,变成只有一个成功,后面的失败.

从最开始的插入多条记录,到后来的只能插入一条数据了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。

您可能感兴趣的文档:

--结束END--

本文标题: Mysql事务并发问题解决方案

本文链接: https://www.lsjlt.com/news/9822.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 基于Golang 高并发问题的解决方案
    Golang 高并发问题的解决 Golang在高并发问题上,由于协程的使用,相对于其他编程语言,已经有了很大的优势,即相同的配置上,Golang可以以更低的代价处理更多的线程,同样的...
    99+
    2024-04-02
  • MySQL事务的ACID特性及并发问题怎么解决
    这篇“MySQL事务的ACID特性及并发问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL事务的ACID特...
    99+
    2023-07-02
  • mysql如何解决并发问题
    mysql并发的解决方法优化sql语句优化代码中sql语句,应尽量避免全表扫描,在 where 及 order by 涉及的列上建立索引;并避免频繁创建和删除临时表,以减少系统表资源的消耗。添加缓存缓存适合读多写少更新频度相对较低...
    99+
    2024-04-02
  • Golang 并发下的问题定位及解决方案
    目录问题描述解决方案实现思路2.1 通过栈信息解析后获取2.2 修改 Go 源码获取2.3 通过 CGO 获取问题描述 在使用 gin-swagger 的过程中, 经常会发生因为缺少...
    99+
    2024-04-02
  • ASP 中常见的并发问题及解决方案
    ASP 中常见的并发问题及解决方案 在 ASP 应用程序中,当多个用户同时访问同一个资源时,会出现并发问题。这些问题会导致应用程序崩溃、数据损坏或数据不一致等严重后果。因此,ASP 开发人员需要了解并发问题的原因和解决方案。 一、并发问题的...
    99+
    2023-11-12
    并发 数据类型 编程算法
  • MySQL中事务处理的常见问题和解决方案
    MySQL中事务处理的常见问题和解决方案在数据库操作中,事务处理是非常重要的,它可以确保数据库操作的一致性和完整性。然而,在MySQL中进行事务处理时,常常会遇到一些问题。本文将介绍常见的MySQL事务处理问题,并提供相应的解决方案。问题一...
    99+
    2023-10-22
    解决方案 问题 事务处理
  • 【mysql】mysql死锁问题解决方案
    mysql死锁问题解决方案 查询出是被哪个进程给锁住了为什么会产生死锁日志内容:日志解析:找到问题: 解决方案 查询出是被哪个进程给锁住了 执行sql: select ...
    99+
    2023-09-23
    mysql adb 数据库
  • Java并发中的ABA问题学习与解决方案
    目录1.简介2.Compare and swap3. ABA问题3.1 ABA问题的实际场景:账户余额修改3.2 账户余额修改时产生的问题4.银行取款问题代码演示5.值类型与引用类型...
    99+
    2024-04-02
  • 分析MySQL并发下的问题及解决方法
    1、背景 对于数据库系统来说在多用户并发条件下提高并发性的同时又要保证数据的一致性一直是数据库系统追求的目标,既要满足大量并发访问的需求又必须保证在此条件下数据的安全,为了满足这一目标大多数数据库通过锁和事...
    99+
    2024-04-02
  • 事件冒泡引发的常见问题与解决方案
    事件冒泡(event bubbling)是指在DOM中,当一个元素上的事件被触发时,它会向上冒泡到该元素的父级元素,再向上冒泡到更高级别的父级元素,直至冒泡到文档的根节点。虽然事件冒泡...
    99+
    2024-02-22
    事件冒泡:事件 问题:冲突 解决方案:停止 事件冒泡 事件捕获
  • mysql并发写入问题如何解决
    在MySQL中,可以通过以下几种方法来解决并发写入问题:1. 事务隔离级别:使用适当的事务隔离级别,如读已提交(Read Commi...
    99+
    2023-10-11
    mysql
  • Java 并发集合中常见的问题与解决方案
    1. 集合修改异常 集合修改异常是指在对集合进行迭代时,集合的内容被修改,导致迭代器失效。这种异常通常发生在多线程环境中,当一个线程正在迭代集合时,另一个线程修改了集合的内容。 解决方案: 使用并发集合:Java 提供了多种并发集合,...
    99+
    2024-02-07
    Java 并发集合 集合修改异常 线程安全 性能 序列化
  • 并发编程中遇到的Python问题及解决方案
    标题:并发编程中遇到的Python问题及解决方案引言:在现代计算机系统中,利用并发编程可以充分发挥多核处理器的性能,提高程序的运行效率。Python作为一种广泛使用的编程语言,也具备了强大的并发编程能力。然而,并发编程中常常会遇到一些问题,...
    99+
    2023-10-22
    解决方案 Python问题 关键词:并发编程
  • 高并发解决方案
    好的,下面是高并发解决方案的详细教程: 水平扩展    - 水平扩展是指增加机器数量,通过将负载分散到多个机器上来解决高并发问题。常用的方式包括负载均衡、分布式缓存等。    - 负载均衡:将流量分发到多台服务器上,防止单台服务器过载。 ...
    99+
    2023-09-22
    数据库 服务器 缓存
  • MongoDB技术开发中遇到的并发访问问题解决方案分析
    MongoDB技术开发中遇到的并发访问问题解决方案分析引言:在当今互联网时代,数据的规模和复杂性不断增长,使得数据库系统面临着越来越严峻的并发访问问题。尤其在大数据领域,MongoDB作为一款非常受欢迎的NoSQL数据库技术,也面临着并发访...
    99+
    2023-10-22
    解决方案 MongoDB 并发
  • 三个方法解决php并发问题
    福利:[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享 !] 解决php并发问题的方法有很多,具体可以使用MySQL的行级锁、乐观锁和Redis的分布式锁等技术来解决。此外,还可以使用消息队列、多进程、多线程等技术来解决php并...
    99+
    2023-08-19
    php 数据库 mysql 网络安全 PHP并发
  • MySQL事务的常见问题及解决方法
    MySQL事务的常见问题及解决方法 在数据库操作中,事务是一个非常重要的概念,可以保证一组SQL语句要么全部执行成功,要么全部失败,并且在并发操作中保证数据的一致性。然而,MySQL中...
    99+
    2024-03-01
    mysql 事务 解决 sql语句 数据丢失
  • 解决Golang Map 并发访问问题的方法
    一分耕耘,一分收获!既然打开了这篇文章《解决Golang Map 并发访问问题的方法》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也...
    99+
    2024-04-04
  • Redis解决高并发问题
    1 模拟商品抢购和并发的效果 这里模拟一个商品抢购的过程所带来的问题,以及解决问题的思路。 这里模拟的商品抢购过程是一个商品正常购买的过程,其中包含了两个主要的步骤:商品库存减少和商品购买记录的添加。...
    99+
    2023-09-21
    redis 数据库 mysql
  • PHP MySQL 乱码问题解决方案详解
    解决PHP MySQL乱码问题是许多开发者在项目中遇到的常见难题。乱码问题的出现主要是由于服务器、数据库和代码三方面的不同编码格式不统一所致。在实际开发中,需要搭配正确的解决方案才能有...
    99+
    2024-03-07
    mysql 乱码 编程php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作