问题标签 [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.
sql - SQL Server UPDATE WITH ROWLOCK 似乎不起作用
我有一个场景,我需要从数据库表中检索一个 INT,将其递增 1,然后返回旧值。我需要确保如果立即再次调用存储过程,则返回的值 (NextBookingId) 与第一次调用存储过程返回的值不同。
我一直在使用下面的代码并假设它正在工作,但我认为它直到现在还没有经过适当的测试并且它似乎没有工作,因为存储过程的 2 个单独和立即调用似乎返回相同的值.
这应该包含在交易中吗?我在 CompanyId 主键上有一个聚集索引。
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 库中......我对吗?
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
查询需要
sql-server - 是否可以在 SQL SERVER 的事务中使用 SELECT 语句锁定行
是否可以在 SQL SERVER 中的事务中使用 SELECT 语句锁定行?我想锁定该行,因此来自外部的其他事务无法到达该行。
事务提交或回滚后,应释放该行。这就是我的意思...
有人有建议吗?我应该执行 UPDATE 语句来锁定行吗?
请不要将此问题标记为重复。因为,我不是在询问 UPDATE 语句,而是在询问 SELECT
编辑:我尝试“设置事务隔离级别可序列化”,但这锁定了太多东西。我的 SP 很大,它有很多 SELECT 语句。'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE' 锁定 SP 中所有 SELECT 的行。但是,我想只锁定一张表中的行。
mysql - MySQL 行锁和原子更新
我正在使用 MySQL 构建一个“穷人的排队系统”。它是一个包含需要执行的作业的表(表名为queue
)。我在多台机器上有几个进程,它们的工作是调用fetch_next2
sproc 以从队列中取出一个项目。
这个过程的重点是确保我们永远不会让 2 个客户得到相同的工作。我认为通过使用SELECT .. LIMIT 1 FOR UPDATE
将允许我锁定单行,以便我可以确定它仅由 1 个调用者更新(更新后它不再符合SELECT
用于过滤“就绪”作业的标准进行处理)。
谁能告诉我我做错了什么?我只是有一些实例,将相同的工作分配给 2 个不同的进程,所以我知道它不能正常工作。:)
stored-procedures - 在存储过程中选择更新(同时增加一个字段)
当连接多个用户时,我想检索一个字段的值并在 Informix 12.1 中安全地递增它。
我在 C 术语中想要的是lastnumber = counter++;
在并发环境中。
文档提到了这样做的一种方法,即让每个人都使用等待参数连接、锁定行、读取数据、增加数据并释放锁定。
所以这就是我尝试的:
而且我可以看到该行被锁定,直到我提交或结束我的会话。
但是,当我将其放入存储过程中时:
数据库给了我一个语法错误。(用不同的编辑器尝试过)那么为什么for update
在存储过程中编写子句会出现语法错误?有没有替代方案?
编辑
这就是我最终得到的结果:
mysql - mysql中的rowlock机制有什么缺点吗?
我是 mysql 的初学者,但基础知识很少,但我对 mysql 的锁定系统有些疑问。行锁机制由 mysql 中的 InnoDB 引擎提供,与表锁相比,它提高了表性能。但我的问题有点不同,对于第一次交易,
现在,我猜它会锁定 userName = raj 的行所以,
- 如果我想检索 userName 以 R 或 r 开头的数据员工,它会给我少 1 行被锁定,还是会因为我锁定的行是其他事务查询的一部分而保持锁定?
- 如果我正在搜索以 K 开头的 userName,它会逃脱第一个事务的行锁并错过由第一个事务引起的更新吗?如果我错了,请纠正我,我只是想弄清楚rowlock。
teradata - Teradata - 如何在不锁定作者的情况下进行选择?(锁定行访问与锁定表访问)
我正在开发一个从 Teradata DWH 获取一些数据的应用程序。DWH 开发人员告诉我LOCK ROW FOR ACCESS
在所有SELECT
查询之前使用以避免延迟对该表的写入。
非常熟悉 MS SQL Servers 的WITH(NOLOCK)
提示,我认为LOCK ROW FOR ACCESS
它是等价的。但是,INSERT
或UPDATE
语句不允许使用LOCK ROW FOR ACCESS
(我不清楚为什么会失败,因为它应该应用于语句选择的表,而不是我插入的表):
我已经看到LOCKING TABLE ... FOR ACCESS
可以使用它,但不清楚它是否符合我的需要(NOLOCK
等效 - 不要阻止写入)。
问题:在 语句中选择时,我应该使用什么提示来最大程度地减少写入延迟?INSERT
sql-server - SQL Server 中 INSERT、UPDATE 或 DELETE 操作的锁定模式是哪种类型?
我知道 NOLOCK 是 SELECT 操作的默认值。因此,如果我什至不with (NOLOCK)
为选择查询编写关键字,该行将不会被锁定。
with (ROWLOCK)
如果没有为 UPDATE 和 DELETE 查询指定,我找不到会发生什么。以下查询之间有区别吗?
和