问题标签 [rowlocking]

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 回答
441 浏览

sql - SQL Server UPDATE WITH ROWLOCK 似乎不起作用

我有一个场景,我需要从数据库表中检索一个 INT,将其递增 1,然后返回旧值。我需要确保如果立即再次调用存储过程,则返回的值 (NextBookingId) 与第一次调用存储过程返回的值不同。

我一直在使用下面的代码并假设它正在工作,但我认为它直到现在还没有经过适当的测试并且它似乎没有工作,因为存储过程的 2 个单独和立即调用似乎返回相同的值.

这应该包含在交易中吗?我在 CompanyId 主键上有一个聚集索引。

0 投票
0 回答
207 浏览

oracle - 看起来像是 JdbcTemplate autoCommit 模式下的 bug

我将 Oracle Universal Connection Pool 用于 DataSource 和 Spring JdbcTemplate。FE:

主要思想 - 我有一个更新行的锁。如果我从 2 个不同的进程执行此操作,则在 jdbcTemplate.execute 方法完成后(“UnLocked”文本),只有在代码完成后(“Finished.”文本)才会释放锁。如果我从代码中删除注释(所以 - 切换到 autoCommit=false 模式)一切都会好的。

我认为这是 JdbcTemplate 中的一个错误。或者在 Oracle 12.1.0.2 ucp 库中......我对吗?

0 投票
1 回答
2052 浏览

mysql - FOR UPDATE 似乎没有锁定 MySql InnoDB 中的行

MySql = v5.6

表引擎 = InnoDB

我打开了一个 mysql cli。我跑:

START TRANSACTION;

SELECT id FROM my_table WHERE id=1 FOR UPDATE;

然后我打开并运行第二个 cli:

SELECT id FROM my_table WHERE id=1;

我希望它等到我提交或回滚第一个事务,但它没有,它只是立即带回行,就好像没有发生行锁定一样。

我做了另一个测试,我status在第一个 cli 中更新了一个字段,但在我提交事务之前我看不到第二个 cli 中的更改,证明事务确实有效。

我是误会FOR UPDATE还是做错了什么?

更新:

FOR UPDATE第二次SELECT查询需要

0 投票
2 回答
4157 浏览

sql-server - 是否可以在 SQL SERVER 的事务中使用 SELECT 语句锁定行

是否可以在 SQL SERVER 中的事务中使用 SELECT 语句锁定行?我想锁定该行,因此来自外部的其他事务无法到达该行。

事务提交或回滚后,应释放该行。这就是我的意思...

有人有建议吗?我应该执行 UPDATE 语句来锁定行吗?

请不要将此问题标记为重复。因为,我不是在询问 UPDATE 语句,而是在询问 SELECT

编辑:我尝试“设置事务隔离级别可序列化”,但这锁定了太多东西。我的 SP 很大,它有很多 SELECT 语句。'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE' 锁定 SP 中所有 SELECT 的行。但是,我想只锁定一张表中的行。

0 投票
1 回答
850 浏览

mysql - MySQL 行锁和原子更新

我正在使用 MySQL 构建一个“穷人的排队系统”。它是一个包含需要执行的作业的表(表名为queue)。我在多台机器上有几个进程,它们的工作是调用fetch_next2sproc 以从队列中取出一个项目。

这个过程的重点是确保我们永远不会让 2 个客户得到相同的工作。我认为通过使用SELECT .. LIMIT 1 FOR UPDATE将允许我锁定单行,以便我可以确定它仅由 1 个调用者更新(更新后它不再符合SELECT用于过滤“就绪”作业的标准进行处理)。

谁能告诉我我做错了什么?我只是有一些实例,将相同的工作分配给 2 个不同的进程,所以我知道它不能正常工作。:)

0 投票
1 回答
1173 浏览

stored-procedures - 在存储过程中选择更新(同时增加一个字段)

当连接多个用户时,我想检索一个字段的值并在 Informix 12.1 中安全地递增它。

我在 C 术语中想要的是lastnumber = counter++;在并发环境中。

文档提到了这样做的一种方法,即让每个人都使用等待参数连接、锁定行、读取数据、增加数据并释放锁定。

所以这就是我尝试的:

而且我可以看到该行被锁定,直到我提交或结束我的会话。

但是,当我将其放入存储过程中时:

数据库给了我一个语法错误。(用不同的编辑器尝试过)那么为什么for update在存储过程中编写子句会出现语法错误?有没有替代方案?

编辑

这就是我最终得到的结果:

0 投票
0 回答
96 浏览

mysql - mysql中的rowlock机制有什么缺点吗?

我是 mysql 的初学者,但基础知识很少,但我对 mysql 的锁定系统有些疑问。行锁机制由 mysql 中的 InnoDB 引擎提供,与表锁相比,它提高了表性能。但我的问题有点不同,对于第一次交易,

现在,我猜它会锁定 userName = raj 的行所以,

  1. 如果我想检索 userName 以 R 或 r 开头的数据员工,它会给我少 1 行被锁定,还是会因为我锁定的行是其他事务查询的一部分而保持锁定?
  2. 如果我正在搜索以 K 开头的 userName,它会逃脱第一个事务的行锁并错过由第一个事务引起的更新吗?如果我错了,请纠正我,我只是想弄清楚rowlock。
0 投票
3 回答
11214 浏览

teradata - Teradata - 如何在不锁定作者的情况下进行选择?(锁定行访问与锁定表访问)

我正在开发一个从 Teradata DWH 获取一些数据的应用程序。DWH 开发人员告诉我LOCK ROW FOR ACCESS在所有SELECT查询之前使用以避免延迟对该表的写入。

非常熟悉 MS SQL Servers 的WITH(NOLOCK)提示,我认为LOCK ROW FOR ACCESS它是等价的。但是,INSERTUPDATE语句不允许使用LOCK ROW FOR ACCESS(我不清楚为什么会失败,因为它应该应用于语句选择的表,而不是我插入的表):

我已经看到LOCKING TABLE ... FOR ACCESS可以使用它,但不清楚它是否符合我的需要(NOLOCK等效 - 不要阻止写入)。

问题:在 语句中选择时,我应该使用什么提示来最大程度地减少写入延迟?INSERT

0 投票
0 回答
46 浏览

database - 死锁后行锁是否仍然存在?

所以在这张图片中,我的老师用红色写道,死锁出现后,transaction1 能够设置 x-lock 并加载旧数据。

在此处输入图像描述

但是在我在 SQL 中尝试之后,我不得不等待,因为显然 transaction2 仍然设置了行锁并且死锁再次发生。

所以我的问题是,(在发生死锁之后)行锁是否仍然存在?因为在我老师提供的这种情况下,显然他们没有。

0 投票
3 回答
1853 浏览

sql-server - SQL Server 中 INSERT、UPDATE 或 DELETE 操作的锁定模式是哪种类型?

我知道 NOLOCK 是 SELECT 操作的默认值。因此,如果我什至不with (NOLOCK)为选择查询编写关键字,该行将不会被锁定。

with (ROWLOCK)如果没有为 UPDATE 和 DELETE 查询指定,我找不到会发生什么。以下查询之间有区别吗?