node.js - mysql InnoDB 并发事务 更新丢失

查看:95
本文介绍了node.js - mysql InnoDB 并发事务 更新丢失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

同一时间多个事务并发更新同一行数据,且更新后的数据是基于更新前的数据,造成了更新丢失的问题。

我将事务的隔离级别设置为了最高的 SERIALIZABLE ,但发现并不能解决这个问题。

在并发事务处理带来的问题中,更新丢失通常应该是完全避免的。但防止更新丢失,并不能单靠数据库事务控制器来解决,需要应用程序对要更新的数据加必要的锁来解决,因此,防止更新丢失应该是应用的责任。

这段话是引用的别人文章中的话,不是很理解。

我的想法有两种:

1、在后台程序中将并发的事务强制变为同步串行执行,但总感觉哪里不妥

2、控制数据库让多个事务对同一行数据进行操作时,不论读写,直接锁死该行数据,先来的事务获得读写的权限,事务完成,下一个事务再获取读写的权限进行操作,但问题如何实现啊?

请各位帮忙解疑,如果你能详细说明下在 node.js 、mysql、sequelize 中如何处理这样更好。

解决方案

会话的隔离级别设置为serializable的时候,其他会话对该表的写操作将被挂起;但是还是可以读取数据的,因此根据读取的数据做更新还可能会有问题。

应用程序中为了防止核心数据被并发修改,一般在查询数据的语句中增加for update的选项,从数据库层面避免造成同一条数据被两个事务同时进行操作。

这篇关于node.js - mysql InnoDB 并发事务 更新丢失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆