表互锁该如何解决

/ mysql / 没有评论 / 1344浏览

表互锁该如何解决

存在流程操作表如下

可能会存在的锁

同表锁定:

不同表互锁:

在两个事务第一步做完后,第二步两个事务互相等待对方完成.这时,就会锁住数据.

同表锁定解决

按主键进行排序,并依次执行,可以解决同表锁定的问题.

不同表锁定解决

  1. 为每个业务定义临时变量,将该业务的数据全部放入临时变量.
  2. 定义接口,操作临时变量,Dao层实现该接口
interface 接口
{
   void create(临时变量)
}
  1. 在具体操作中,通过Spring注入接口数组的方式来运行调用数据库.
@Autowired
private List<接口> unitCreates;

// 利用接口循环创建单据,防止更新表顺序冲突
for (接口 unitCreate : unitCreates) {
    unitCreate.create(临时变量);
}