背景
- 应产品需求,每日统计数据要重新刷一遍,于是用代码写了个接口,代码如下所示。
- 谁知在执行这段代码时,刚好其他地方来了个修改的操作,我模拟了一下当时的场景,如下图所示。
- 因为我代码是加过事务的,此时还没执行完,没有提交事务,如果上面SQL和我的代码操作是同一条数据(因为有加索引,严格意义来说还不算表锁,所以操作同一条数据有问题),极有可能发生锁超时
Lock wait timeout exceeded; try restarting transaction
,如下图所示。
反思
- 尽量避免长事务。我把事务去掉了,并记录好回滚方案。