0 0

MyBatis事务并发控制锁定问题-很心焦0

我们系统采用springMVC+MyBatis的架构,数据使用的是mysql,数据库的隔离级别是默认的:REPEATABLE-READ。现在发现一个事务并发控制锁定问题。
我们系统有一个业务逻辑,每个人只能执行一次,所以开启事务的时候,我们使用悲观锁进行控制:select * from table where type = 1 and id = XXX for update;如果用户点击非常快,点击两次的话,就会启动两个事务进行控制,暂定A和B两个事务。假如A事务先获得锁,那么只有A事务执行完成之后B事务才能获得锁,B事务就会处于等待状态。A事务在处理完成之后,就会把类型type修改了,改成了其他的值,比如说:2,但是B事务在获得了锁之后,即本语句select * from table where type = 1 and id = XXX for update;能够执行通过,但是该用户的type还是1,即还是A事务修改之前的数值。
请各位大牛多多帮忙!!!
小弟感激不尽!!!
2014年11月03日 17:16

8个答案 按时间排序 按投票排序

0 0

如果用户点击非常快,点击两次的话,就会启动两个事务进行控制

可以在页面添加一个防止多次提交的功能。就不会出现两个事物的问题了

2017年3月20日 17:16
0 0

而且也不执楼主这样使用mysql的悲观锁。悲观锁在没有走索引的情况下会变成表级锁。

2014年11月07日 15:38
0 0

修改你的SQL:去除查询条件type = 1 。事务A获取锁后,在代码中过虑出需要更新的记录,然后更新记录,提交事务。此时事务B就可以获取锁,查询出需要更新的最新记录(被事务A更新后的记录),再在代码中过虑需要更新的记录(逻辑同事务A),及可解决你的问题。

2014年11月07日 14:31
0 0

select * from table where type in ( select type from table where id =xxx ) and id = XXX for update;

2014年11月05日 15:33
0 0

另起一张表用每个人的标识做主键。插入表数据作为一个事务。如果那个人已经做过就插入不了。事务里面你想要只执行一次也回回滚。

2014年11月04日 17:27
0 0

考虑以下做法:
1)考虑将事务的隔离级别修改为read-commited;
2)事务B应该后续会做一定的更新的,可以在更新后面加一个type条件,比如说update table set xxxx where id=xxx and type=xxx,避免重复更新。根据返回结果的数量(如果是0的话表示已经被其他人更新过了)决定程序如何处理(放弃或者重试)

2014年11月04日 08:01
0 0

java 代码级锁呢, 事物的代码加同步锁

2014年11月03日 18:42
0 0

幻影读,必须加range锁。
比如你应该用
select * from table where id = XXX for update;
去悲观锁一片数据
获得锁之后(另一个事务提交后)
select * from table where type = 1 and id = XXX for update;
就可以取得正确的数据了。

2014年11月03日 17:48

相关推荐

    开发工具 mybatis-3.4.2

    开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2...

    mybatis-generator-core-1.3.7-API文档-中文版.zip

    赠送jar包:mybatis-generator-core-1.3.7.jar; 赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-...

    MyBatis-Plus 的官方示例(mybatis-plus-samples-master.zip)

    本工程为 MyBatis-Plus 的官方示例,项目结构如下: mybatis-plus-sample-quickstart: 快速开始示例 mybatis-plus-sample-quickstart-springmvc: 快速开始示例(Spring MVC版本) mybatis-plus-sample-reduce-...

    mybatis-spring-boot-starter-2.0.0.jar

    mybatis mybatis-spring-boot-starter-2.0.0.jar下载

    MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar

    mybatis-plus就很好的解决了这个问题。 MyBatisPlus是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它主要通过启动时自动注入基本CURD,达到简化操作的目的。 关于...

    somedaymail-mybatis-plus--DM-GE-master.zip

    《Mybatis-Plus与达梦数据库的高效整合实践》 在现代软件开发中,数据库操作是不可或缺的一部分。Mybatis-Plus作为一个优秀的Mybatis扩展框架,极大地简化了数据库的CRUD操作,提高了开发效率。而“somedaymail-...

    mybatis-plus-boot-starter-3.1.0.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-plus-boot-starter-3.4.3.3.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-3-mybatis-3.2.6

    1. **配置解析**:MyBatis的配置文件(mybatis-config.xml)被解析成Configration对象,这个对象包含了所有的全局配置信息,如数据源、事务管理器、Mappers等。解析过程主要由XMLConfigBuilder类完成。 2. **...

    mybatis-spring-boot-starter-2.1.3.jar

    mybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jar

    mybatis逆向工程mybatis-generator-core-1.3.2jar包

    在本案例中,我们关注的核心是`mybatis-generator-core-1.3.2.jar`这个文件,它是MyBatis逆向工程的主要实现库。 MyBatis Generator (MBG) 是一个能够自动生成Java源代码和XML配置文件的工具,这些文件与MyBatis...

    mybatis-spring-boot-autoconfigure-2.1.3.jar_idea安装maven插件

    mybatis-spring-boot-autoconfigure-2.1.3mybatis-spring-boot-autoconfigure-2.1.3

    mybatis-spring-boot-starter-2.1.4.jar

    mybatis-spring-boot-starter-2.1.4.jarmybatis-spring-boot-starter-2.1.4.jar

    mybatis-spring-2.0.6-API文档-中文版.zip

    赠送jar包:mybatis-spring-2.0.6.jar; 赠送原API文档:mybatis-spring-2.0.6-javadoc.jar; 赠送源代码:mybatis-spring-2.0.6-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-2.0.6.pom; 包含翻译后的API...

    mybatis-plus-boot-starter-3.5.3.2.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-plus-generator-maven-plugin-1.0.0.jar

    为了在项目中快捷方便的代码生成,将mybatis-plus-generator封装为了一个maven的插件`mybatis-plus-generator-maven-plugin。使用文档参考:https://blog.csdn.net/xiweiller/article/details/103072165

    mybatis-3.5.9-API文档-中文版.zip

    赠送jar包:mybatis-3.5.9.jar; 赠送原API文档:mybatis-3.5.9-javadoc.jar; 赠送源代码:mybatis-3.5.9-sources.jar; 赠送Maven依赖信息文件:mybatis-3.5.9.pom; 包含翻译后的API文档:mybatis-3.5.9-javadoc-...

    mybatis-plus-boot-starter-3.5.3.1.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-plus快速入门项目-mybatis-plus基本操作大全-附带sql+项目文档

    MyBatis-Plus支持乐观锁机制,通过在实体类中添加version或timestamp字段,可以在更新数据时防止并发问题。 10. **项目文档** 提供的项目文档应该详细介绍了如何搭建环境、配置MyBatis-Plus、使用各种API以及如何...

    mybatis-generator-core-1.3.2(mybatis自动生产中文注释-解决没有主清单属性的问题)

    mybatis-generator-core-1.3.2(mybatis自动生产中文注释-解决没有主清单属性的问题)

Global site tag (gtag.js) - Google Analytics