首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用SQL server序列化事务隔离级别问题

使用SQL server序列化事务隔离级别问题
EN

Stack Overflow用户
提问于 2017-08-24 15:48:24
回答 1查看 1K关注 0票数 3

我们有一个具有Sequelize事务的函数。在事务中,它检查数据库表行上的一个字段,并根据该字段返回或继续更新各种数据库表。

例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let buyingStatus = await models.buyingFood.findOne({ where: { id: 21 }, transaction: t});
if (buyingStatus.status == 'bought') return 'already bought'

如果继续,它将更新多个位置,这些位置应该只在状态不是bought时更新,最后,将状态更改为bought

问题是当函数同时被调用两次时。瓶颈是select语句之后发生的更新。因此,两个人可以传递未购买的购买状态,然后两个人都更新bought状态,以及所有其他更新。

由于不是SQL方面的专家,我们研究发现,锁定表或更改隔离级别可以解决此问题。然而,我们同时实现了这两种方法,并没有提供帮助。见下文

1)更改隔离级别

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let t = await models.sequelize.transaction(isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE); 

2)在find上设置锁

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let buyingStatus = await models.buyingFood.findOne({ where: { id: 21 }, transaction: t, lock: t.LOCK.UPDATE });

我们想要的是读取未提交的事务,因此如果A更改了之前的bought状态,则B将无法提交

EN

回答 1

Stack Overflow用户

发布于 2018-11-01 12:45:25

读操作可以并发运行,需要使用相同事务的不同更新需要导致不可序列化冲突才会发生错误。因此,要能够应答一个呼叫将需要更多信息,但如果两个调用的最终结果相同,则不会导致冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45865995

复制
相关文章
SQL Server 事务隔离级别
以上说明事务隔离级别主要针对读操作来说的。(DML语句我们可以不考虑事务隔离级别,因为任何事物隔离级别下DML的加锁都很严格,属于得不到就等待的类型)
yaphetsfang
2020/07/30
1.3K0
SQL Server 事务隔离级别
SQL Server中锁与事务隔离级别
SQL Server中可以锁定的资源包括:RID或键(行)、页、对象(如表)、数据库等等。
雪飞鸿
2018/09/05
1.4K0
SQL Server中锁与事务隔离级别
MY-SQL事务隔离级别
首先创建一个表 account。创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB)。表的结构如下:
用户4283147
2022/10/08
3510
MY-SQL事务隔离级别
oracle事务隔离级别_mysql查看事务隔离级别
通常事务的隔离级别定义为以下4种(基于3种在并发事务中需要避免的现象来划分的):
全栈程序员站长
2022/11/04
1.8K0
事务隔离级别
  MySQL是一个 客户端/服务器 架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每 个客户端与服务器连接上之后,就可以称为一个会话( Session )。每个客户端都可以在自己的会话中 向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理 多个事务。事务有 隔离性 的特性,理论上在某个事务 对某个数据进行访问 时,其他事务应该进行 排 队 ,当该事务提交之后,其他事务才可以继续访问这个数据。但是这样对 性能影响太大 ,我们既想保持 事务的隔离性,又想让服务器在处理访问同一数据的多个事务时 性能尽量高些 ,那就看二者如何权衡取 舍了。
一个风轻云淡
2022/11/15
8040
事务隔离级别
弱隔离级别 & 事务并发问题
如果两个事务操作的是不同的数据, 即不存在数据依赖关系, 则它们可以安全地并行执行。但是当出现某个事务修改数据而另一个事务同时要读取该数据, 或者两个事务同时修改相同数据时, 就会出现并发问题。
真正的飞鱼
2022/09/11
5910
spring事务的默认隔离级别_事务隔离级别有哪些
事务的四个隔离级别想必大家都已经清楚,但是在学习Spring的时候,我们发现Spring自己也有四个隔离级别(加上默认的是五个)。
全栈程序员站长
2022/11/04
1.2K0
spring事务的默认隔离级别_事务隔离级别有哪些
事务隔离级别总结
事务(Transaction)是数据库系统中一系列操作的一个逻辑单元,所有操作要么全部成功要么全部失
张申傲
2020/09/03
6880
mysql事务隔离级别
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
CodingCode
2021/09/23
1.4K0
mysql事务隔离级别
事务的隔离级别
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)。可以通过 SELECT @@tx_isolation; 命令来查看:
happyJared
2019/08/12
5940
MySQL事务隔离级别
读未提交是一个事务仅修改了数据但还未提交时,本次修改可以便可被其他事务查询到变更后的值。读未提交隔离级别下,其他事务进行查询时,直接返回记录上的最新值,没有视图概念。
关忆北.
2022/11/16
1.4K0
MySQL事务隔离级别
Mysql事务隔离级别
在所有事物中可以看到事物没有提交的结果,实际应用中是很少的,他的性能也不比其他隔离级别好很多,读到未提交的结果导致脏读
小土豆Yuki
2020/08/28
1.5K0
mysql事务隔离级别
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
Java帮帮
2019/06/15
1.6K0
MySQL事务隔离级别
1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
Java技术债务
2022/08/09
1.1K0
Spring事务隔离级别
这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。
一觉睡到小时候
2020/07/13
4750
MySQL事务隔离级别
索引是MySQL的数据结构,关系着MySQL如何存储数据,查询数据;而如何操作数据,解决多线程时操作数据带来的问题,则需要通过事务来完成。
阿珍
2023/05/17
4250
mysql 事务隔离级别
1. MySQL事务隔离级别, 默认是可重复读(repeatable-read)
北漂的我
2020/12/02
1.1K0
MySQL 事务隔离级别[通俗易懂]
通过如下 SQL 可以查看数据库实例默认的全局隔离级别和当前 session 的隔离级别:
全栈程序员站长
2022/11/04
2.5K0
MySQL事务隔离级别
这四种级别由上至下,隔离强度逐渐增强,性能逐渐变差。它们没有绝对的优劣,采取哪种应该根据系统需求决定。MySQL默认级别为:可重复读。
Libertyyyyy
2022/10/25
1.3K0
事务的四种隔离级别_事务默认的隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。
全栈程序员站长
2022/11/04
8200

相似问题

SQL Server中的事务隔离级别

28

使用哪种SQL事务隔离级别?

112

SQL server隔离级别

31

隔离级别- SQL Server

111

Server事务/隔离级别和锁定

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文