文档章节

For Update

learn_more
 learn_more
发布于 2016/06/27 17:51
字数 323
阅读 53
收藏 1
点赞 0
评论 0

心得:

    项目中使用 for update 来控制业务逻辑,实际上 for update 是不推荐开发中使用的一种锁,原因是非常容易产生死锁。

    还要注意的是锁的级别,因为InnoDB 的锁是建立在索引上,如果你没有使用索引查询数据,那么锁的级别就是表,否则就是索引数据也就是行级锁

    个人觉得,尽量使用数据校验+数据回滚的方式来避免业务上的控制,比如库存数量,我们可以通过最后库存数的大小判断是否需要回滚。

 

日志:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_65]

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_65]

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_65]

    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[?:1.8.0_65]

    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.Util.getInstance(Util.java:387) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:2090) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1964) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:3306) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:463) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3040) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2288) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2681) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) ~[mysql-connector-java-5.1.38.jar:5.1.38]

    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192) ~[mysql-connector-java-5.1.38.jar:5.1.38]

 

© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 91
博文 240
码字总数 210196
作品 0
深圳
程序员
Pentest Box v2.2更新说明

如果要对Pentest Box更新,你可以使用update命令,以下是update的更新脚本源代码所在位置。 update的更新脚本:https://github.com/pentestbox/scripts/blob/master/update.py 但在更新过程中...

林鸿风采
2016/12/06
0
0
OpenELEC 6.0 Beta 3 发布,嵌入式操作系统

OpenELEC 6.0 Beta 3 发布,主要更新内容如下: update to dvb-firmware-0.0.48 update to kodi-15.0-rc2-0aa930b update to bcm2835-bootloader-47d51d6 update to bcm2835-driver-47d51d6 ......

oschina
2015/07/17
1K
0
OpenELEC 5.0.1 发布,嵌入式操作系统

OpenELEC 5.0.1 发布,此版本现已提供下载。此版本值得关注的特性是从 XBMC 13 (Gotham) 切换到 Kodi 14 (Helix),更多内容请看 OpenELEC 5.0 发行说明。 此版本最主要是平台支持方面的改进:...

oschina
2015/02/03
1K
2
PB开发境界 多个DW进行update

多个DW进行update //菜鸟代码 dw1.Update() dw2.Update() 初级代码 IF dw1.Update() = 1 And dw2.Update() = 1 THEN COMMIT; ELSE ROLLBACK; END IF 中级代码 IF dw1.Update() = 1 THEN IF ......

CYQ0520
2017/07/10
0
0
nginx mac 10.10 编译报错

/os/unix -I ../pcre-8.36 -I objs -o objs/src/core/ngx_crypt.o src/core/ngx_crypt.c src/core/ngxcrypt.c:82:5: error: 'MD5Init' is deprecated: first deprecated in OS X 10.7 [-Werr......

guhongzi
2014/10/22
0
0
OpenELEC 6.0 Beta 2 发布,嵌入式操作系统

OpenELEC 6.0 Beta 2 发布,部分更新内容如下: update to mesa-10.6.0 update to kmod-21 update to kodi-15.0-beta2-daedd5f update to freetype-2.6 update to OpenELEC-settings-0.6.8 u......

oschina
2015/06/16
526
0
OpenELEC 5.0.7 发布,嵌入式操作系统

OpenELEC 5.0.7 发布,此版本核心组件更新如下: update to bcm2835-bootloader-ffda51e update to bcm2835-driver-ffda51e update to linux-3.18.10 for RPi2 update to gdb-7.9 update to......

oschina
2015/03/30
849
0
CentOS 6下载地址-更新国内镜像

更新国内镜像站点。 千呼万唤始出来,CentOS 6下载地址已经放出,内部镜像正在向外部镜像站点更新,但是国内镜像站点暂时没有更新。喜欢尝鲜的朋友可以下载了,关于CentOS介绍,请移步。本站...

heaphy
2011/07/09
0
1
Hibernate – Dynamic-Update Attribute Example

What is dynamic-update The dynamic-update attribute tells Hibernate whether to include unmodified properties in the SQL UPDATE statement. Dynamic-update example 1. dynamic-updat......

heroShane
2014/02/14
0
0
SpringSource Tool Suite 2.5.2.SR1 和 2.6.0.M2

SpringSource Tool Suite 今天发布了两个新版本,分别是: The service refresh for STS 2.5.2 includes: Update to Spring Roo 1.1.2 (including UAA update) Update to Eclipse Helios SR2......

红薯
2011/03/02
276
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python以太坊类库web3.py概览

python通过web3.py库与以太坊交互共同入口是web3对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers使...

智能合约
7分钟前
0
0
【Android学习笔记】设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg。 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: >>>阅读全文

全部原谅
9分钟前
0
0
什么是React-redux、为什么使用React-redux、怎么使用React-redux

1、什么是React-redux React-redux是用于连接React和Redux的 2、为什么使用React-redux 使用React-redux可以使redux部分代码更简洁更明了,比如组建中需要使用到的数据都在mapStateToProps方...

kimyeongnam
11分钟前
0
0
Spring核心——Stereotype组件与Bean扫描

在注解自动装载中介绍了通过注解(Annotation)自动向Bean中注入其他Bean的方法,本篇将介绍通过注解(Annotation)向容器添加Bean的方法。 Spring的核心容器提供了@Component和@Bean注解来标...

随风溜达的向日葵
11分钟前
0
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

猫咪编程
15分钟前
0
0
flink fold example

flink fold例子 import org.apache.flink.api.common.functions.*;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.S......

coord
16分钟前
0
0
c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
20分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
20分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
22分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部