文档章节

For Update

learn_more
 learn_more
发布于 2016/06/27 17:51
字数 323
阅读 88
收藏 1

心得:

    项目中使用 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
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

Pentest Box v2.2更新说明

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

林鸿风采
2016/12/06
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
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
184
0
Go 高性能分词 Gse v0.20.0 发布, 优化性能

Go 语言高效分词, 支持英文、中文、日文等 词典用双数组trie(Double-Array Trie)实现, 分词器算法为基于词频的最短路径加动态规划。 支持普通和搜索引擎两种分词模式,支持用户词典、词性...

vz
2018/10/10
1.5K
5
Robotgo v0.50.0 发布,Go 桌面自动化,巨大更新

Robotgo v0.50.0 The Appalachian Mountains 已发布,该项目实现了 Golang 跨平台控制鼠标、键盘、位图、屏幕、窗口句柄以及全局事件监听。 The Appalachian Mountains Add [NEW] Add simple...

vz
2018/08/09
540
2

没有更多内容

加载失败,请刷新页面

加载更多

00-Java 面试准备

面试之前 面试前准备简历需要注意的几个方面: 写简历、改简历,这个一定要干的。简历有两个作用,一个是吸引别人,能让别人邀请你去面试,这是前提;另一个是引导面试的人,让面试的人问你所...

源程序
今天
54
0
OSChina 周二乱弹 —— 大王(@罗马的王)颜值制霸Osc社区

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :Lunik的单曲《Seeing You Soar》 I hope you’re smiling,When seeing me soar. #今日歌曲推荐# 《Seeing You Soar》- Lunik 手...

小小编辑
今天
83
0
wordcount代码

1.写出map类 public class WCMapper extends Mapper<LongWritable,Text,Text,LongWritable>{ @Override protected void map(LongWritable key,Text value,Context context)throws IOExcepti......

七宝1
今天
59
0
Spring Batch 小任务(Tasklet)步骤

Chunk-Oriented Processing不是处理 step 的唯一方法。 考虑下面的一个场景,如果你仅仅需要调用一个存储过程,你可以在 ItemReader 中实现这个调用,然后在存储过程完成调用后返回 null。这...

honeymoose
今天
67
0
Linux日志分析

1. Linux日志文件的类型 2. 系统服务日志 2.1 syslogd的简介 2.2 syslogd的配置和使用 2.3 日志的安全性设置 2.4 远程日志记录服务 3. 日志的轮替 3.1 logrotate简介 3.2 logrotate的配置 3....

JiaMing
昨天
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部