问题标签 [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.
laravel - Laravel 悲观锁锁定整个表而不是单行
Laravel 版本:7.15
PHP版本:7.4.6
数据库驱动程序和版本:MariaDB 10.4.11
下面的代码将返回每个发票的数组响应。一旦调用了 action 方法,id=1
它需要 20 秒才能被提交。当调用id=2
响应的相同方法等到第一个事务完成时。为什么行级锁定不起作用。
它以前在 Laravel 6.x上工作
AlockForUpdate()
锁定特定行,直到它成功提交 ( Select * from invoices where id=1 FOR UPDATE
)。但select * from invoices where id=2 FOR UPDATE
不应该等到第一个查询被提交。同样,如果没有指定锁 ( Select * from invoices
),则不会绘制记录,它会等待提交第一个事务。锁定整个表而不是单行的可能原因是什么?
在7.x中,当您锁定单行时,整个记录(表)都会被锁定!
sql-server - 在 MSSQL 服务器中使用行锁进行更新
我试图了解 SQL Server 中的 ROWLOCK 以在锁定记录后更新记录。这是我的观察,并想确认 ROWLOCK 是否像表或页面锁之类的东西,或者我没有正确尝试。ROWLOCK 应该是对行的锁定,而不是对表或页面的锁定。
这是我尝试过的:
我创建了一个简单的表:row_lock_temp_test
有两列ID和Name,没有 PK 或索引。现在我打开 SQL Server,两个不同的客户端但相同的凭据并尝试执行一组查询,如下所示:
客户 1:
客户 2:
我在 C-1 上执行了查询 1、2,然后转到 C-2 并执行相同的查询,两个客户端都执行了查询,然后我提交了事务,一切都很好。
然后我添加了 RowLock 来更新查询,
C-1
C-2
现在,我在 C-1 上执行了查询 1 和 2,然后转到 C-2 并尝试执行相同的 2 个查询,但是由于该行被 C-1 锁定,所以它应该在队列中,直到事务在 C-1 上提交。一旦我在 C-1 上提交了事务,对 C-2 的查询就被执行了,然后我也在 C-2 上提交了事务。都好。
在这里,我尝试了另一种场景来执行同一组查询,其中行 id = 3
C-2
我在 C-1 中执行了第一个两个查询,然后执行了 C-2 的第一个两个查询,两个客户端的行 ID 不同,但是 C-2 中的查询仍然卡住了。这意味着在使用 id = 2 更新查询时,它已锁定页面或表,我期待行锁定,但它似乎是页面或表锁定。
我还尝试使用 xlock、HOLDLOCK 和 UPDLOCK 和不同的组合,但它总是锁定表。有没有可能只锁定一行。
选择和插入按预期工作。
提前致谢。
c# - 在带有 linq 的 EF Core 中使用 postgresql "SELECT FOR UPDATE" - FromSqlRaw
我试图在 EF Core 中使用 postgresql 的 ROW LOCK。我有一个 .net 核心应用程序和 postgresql 数据库。
在 GetUserContainer 函数中,我使用 FromSqlRaw 构建查询,如下所示
其中 rowLock 是一个函数参数,其值可以是“FOR UPDATE”或“FOR SHARE”。
我使用下面的代码来读取 UserContainers 并更新
注意:上面代码中用到的函数片段如下
根据代码和行锁概念,我希望第二个任务中的 getusercontainer 要么失败,要么等到行锁被释放,因为它被第一个任务锁定。
我试图确保从应用程序端更新用户的 ACID 事务。Postgresql 文档 ( ROW LOCK ) 清楚地表明它在 SQL 中是可能的,但是我需要在 C# 中实现它。
我做错了什么/遗漏了重要的细节吗?或者欢迎任何通过新方法实现这一目标的建议。
mysql - 为什么对于 SQLCOM_UPDATE_MULTI,它用 lock_s (INNODB) 锁定其他表
innodb READ-COMMITTED:
桌子:
情况1:
案例2:
在 ha_innobase::store_lock 中,只处理了 SQLCOM_UPDATE。
为什么 SQLCOM_UPDATE_MULTI 不能是 LOCK_NONE ?,但是 SQLCOM_UPDATE 和 LOCK_NONE 。
java - MySQL 更新需要更多时间与并发用户命中
我有一个运行本机查询的 Spring Boot 应用程序。
在用户表中,
card_id 是主键,
user_id 是唯一键。
该表包含许多具有不同状态的卡(最多 4 个状态)我需要选择状态为“U”的行并将用户分配给该行。
看起来桌子在某个地方被锁住了。
我有大约 500 万条记录。当运行大约 40 个并发用户时,单个调用大约需要 40 秒。
谢谢。
mysql - MySQL 中的可序列化和基于行的锁定
我正在尝试将数据库从 MsSQL 转换为 MySQL。
对于 MsSQL 中存在的 Serializable 隔离级别,在 MySQL 中究竟应该如何进行事务配置?因为 MsSQL 关键字不起作用。
例子;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION;
UPDATE table_name SET column1 = value1, column2 = value2, ...
WHERE 条件
GO
COMMIT TRANSACTION;
去
除了这个;在事务开始和提交之间对表的一行进行事务时,是否有基于行的锁定功能?
例子;
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE 条件
// 仅用于条件的基于行的锁定
如果默认禁用,我应该怎么做才能启用它?
谢谢你。
sql - Postgres 行锁定
我是 Postgres 的新手(甚至是 SQL)。我正在构建一个密钥数据库,它有一个名为 Key 的表。我的问题是如何在 pg.
如果一个连接正在读取第一条记录,同时第二条连接进来,它应该读取第二条记录而不是第一条。第 3 次第 4 次也是如此,以此类推。