问题标签 [select-for-update]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
35 浏览

python - 如何过滤最佳相关并在一个查询中创建?

我想选择最好的相关对象并在一个查询中保存新的对象以避免竞争条件。可能吗?select_for_update 能解决这个问题吗?

0 投票
0 回答
288 浏览

oracle - 迁移到 12c 后,Oracle 表单在后台触发更新 nowait 查询

在查询模式下迁移到 oracle 12c db 和特定表单上的表单后,我们无法键入任何内容,并且在跟踪日志中我可以看到 select..for update of column_name nowait 查询会在尝试在任何内容中键入任何内容时自动触发字段。

0 投票
1 回答
146 浏览

mysql - 既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是什么?

从这里: https ://stackoverflow.com/a/27868682/10894456

SELECT ... FOR UPDATE 将使用写(独占)锁锁定记录,直到事务完成(提交或回滚)。

要选择一条记录并确保在您更新它之前它不会被修改,您可以启动一个事务,使用 SELECT ... FOR UPDATE 选择记录,进行一些快速处理,更新记录,然后提交(或回滚)事务.

在这里 https://stackoverflow.com/a/5411366/10894456

请注意,事务之外的 FOR UPDATE 是没有意义的

因此,既然没有事务的 INSERT FOR UPDATE 是没有意义的,并且事务本身使用锁,那么 INSERT FOR UPDATE 的用例是什么?我唯一的猜测:SELECT ... FOR UPDATE 只有在事务具有低隔离级别(如 read_uncommit)时才有意义,但我不确定,请帮帮我

0 投票
1 回答
159 浏览

mysql - SELECT … FOR UPDATE 对不存在的行

当“选择...更新不存在的行”时,我对锁感兴趣;目前,表'test02'中的数据如下:

ID

1

3

8

15

20

列 id 是主键;

当我跑步时:

session1:开始事务;select * from test02 where id = 7 for update;

然后我打开另一个会话,并作为研究员运行:

session2:开始事务;select * from test02 where id = 7 for update;

正如我所料,session2 将等待间隙锁 (3, 8);但是两个会话正常运行。有没有人可以帮助解释为什么 session2 不等待?

但是当我在 session3 中运行以下 sql 时:插入 test02(id) 值 (7); 会话被阻塞,这意味着使用了 session1 中的间隙锁。但我不明白为什么 session2 可以正常运行。

mysql 版本 5.7 和 5.8 都显示相同的结果。

0 投票
0 回答
239 浏览

spring-boot - 如何在spring-boot中使用select进行更新

我现在正在使用 spring-boot v.4.3.18 和 mariadb v.10.4.6 。我想使用选择进行更新,例如电影预订服务或银行转账服务。

我的项目是这样连接mariadb的。 在此处输入图像描述

我正在使用映射器读取数据。

有没有使用mybatis查询'select for update'的方法?

如果什么都没有,那么请告诉我如何解决这个问题。

0 投票
1 回答
290 浏览

mysql - 当我尝试使用 FOR UPDATE NOWAIT 时,MariaDB 抛出错误

当我尝试NOWAIT在我的选择查询中使用时,出现以下错误。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOWAIT' at line 1

我的 Mariadb 版本是10.2.29-MariaDB-1:10.2.29+maria~bionic

有人能帮助我吗?

0 投票
1 回答
1279 浏览

oracle - ORA-20762: 错误 01002: 在线过程中遇到乱序提取

我有一个调度程序作业(程序),这个调度程序作业应该运行完美。它按照逻辑工作。此过程没有任何输入参数。它有三到四个游标来获取数据并在游标工作时更新相同的表条件。问题是……让我讲一个场景。假设在过程中有一个名为“sample”的表,我只是使用游标获取记录并更新“sample”表中的值,然后在游标的结束循环旁边提交。我正在使用 plsql 开发人员 IDE。我正在尝试通过在 plsql 开发人员 ide 中放入 select val1,val2 from sample where val3='A' for update;plsql 开发人员 ide 而不在作业即过程运行的同时单击提交按钮来访问表“样本”中的数据作为在游标中获取的相同记录。ORA-20762: Error-01002: fetch out of sequence encountered on line procedure 错误指向它的抛出错误fetch cursor into ..'FOR UPDATE NOWAIT'

0 投票
1 回答
1361 浏览

sql - 涉及 SELECT FOR UPDATE 的死锁

我有几个查询的交易。首先,选择FOR UPDATE带锁的行:

接下来是更新查询:

然后有一个插入:

我有两个应用程序实例,有时我会在 PostgreSQL 日志中看到死锁错误:

我认为它可能是由ON CONFLICT DO UPDATE语句引起的,该语句可能会更新先前未锁定的行SELECT FOR UPDATE

但是我不明白SELECT ... FOR UPDATE如果它是事务中的第一个查询,查询如何导致死锁。在它之前没有查询。语句可以SELECT ... FOR UPDATE锁定几行然后等待条件中的其他行被解锁吗?

0 投票
1 回答
123 浏览

group-by - Axapta:Group By 子句后出现“从未选择过记录”错误

我是 Ax 2009 的新手。在加入另一个表 B 后,我想更新表 A 中记录的字段,我想在其 ID 上应用 Group by。

我尝试运行以下代码,但它给我一个错误“无法编辑 tableA 中的记录。该记录从未被选中”:

我认为这应该是由于在 tableA 上使用 Group By 子句引起的,但是如果我将其删除,则在 if 检查中, tableA.Dimension[5] 为空。

请有人帮助我。谢谢你。

0 投票
1 回答
164 浏览

database - CockroachDB 中的行级锁定

我需要获取行级锁定以进行更新,同时允许其他选择查询获取未锁定的预期行。

我观察到的是,如果我锁定 row1,则不允许其他正在搜索其他行的选择查询。

我有下表架构 -

插入以下 2 行 -

开设2个航站楼 -

第一个航站楼 -

2号航站楼——

预计第二个终端会显示val2的结果,但它没有(进入等待状态),而是在我在第一个终端执行提交后,第二个终端显示了结果。

我尝试将 where 子句从col_with_unique_index更改为这里的主键id,这次第二个终端没有等待并显示了预期的结果。

我无法理解这里的行为。如果我的 where 子句中有主键,我只能使用行级锁吗?