问题标签 [table-locking]

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 投票
2 回答
438 浏览

mysql - Mysql为每个用户插入连续的行

我有一个名为“picks”的表,当用户登录并开始选择时,它最初会在该用户的“picks”表中插入 64 行(将用户 ID 作为列)。这些行是使用 php 中的循环插入的,因此使用 PDO 准备语句有 64 个插入。每个用户只需执行一次。我需要这些行对于该用户是连续的。如果其他几个用户在同一时间做同样的事情怎么办?是否有可能不会连续插入行?我需要使用表锁吗?我以前从未使用过它们。MySql 版本:5.0.92-rs-log MyISAM 谢谢

0 投票
1 回答
3946 浏览

sql-server - SQL Server 中的 MS Access 锁定表?

我已经使用 SQL Server 2 年多了,但我是 MS Access 的新手。我刚刚开始将 MS Access 视为访问 SQL Server 的潜在前端/门户,我正在与一位同事交谈,他说如果我的表单不是,我应该警惕 MS Access 锁定 SQL 表的可能性t 编码正确。我以前经历过桌子锁,并且可以理解它们是多么令人沮丧。我的同事提到使用一种称为“传递”的方法来解决问题。谁能帮助我解释正在发生的事情以及“通过”如何解决问题?

0 投票
1 回答
624 浏览

mysql - MySQL在没有自动增量的情况下获得下一个唯一值

我有一个 MySQL 数据库 (InnoDB),我正在开发用于跟踪我组织中的工单。有多个“站点”,每个站点的工单编号从 100 开始。

WorkorderID是自动增量字段。
SiteIDSiteWorkorderNum都设置为唯一约束。

每当要为特定站点插入新的工作订单时,应用程序都会检查登录者的 siteid 的 max(SiteWorkorderNum),并将该值返回到插入语句。我要避免的问题是,如果同一站点的两个用户都同时输入新的工作订单。

我有几个可能的解决方案,但我想看看是否有更好的方法,因为每个都有它的缺点,但我确信一个会比另一个更好,当然我对新想法持开放态度。

1)锁定表以保证在我们检索并插入我们的值之前没有其他用户检索 SiteWorkorderNum 值(但是假设我们每分钟有成千上万的用户试图输入工作订单,表锁不会减慢速度吗? )

2)不要锁定表,并检索下一个可用的 SiteWorkorderNum 并尝试插入到数据库中,如果我收到唯一约束错误,则捕获错误并重试,直到我成功。(这可能会释放表,但再次假设我们在同一个站点有数千个用户,多个数据库调用会有点低效吗?)

我是否对这些解决方案中的任何一个“可能”影响性能过于偏执?当然,我没有成千上万的用户,但我想在这个设计中应用最佳实践,以防我曾经从事过流量很大的项目。

0 投票
1 回答
61 浏览

mysql - 我应该使用表锁还是事务?

我有 2 个表,一个称为 user,用于存储用户,另一个称为 process,用于存储更新用户的活动进程列表。

我想要做的是能够选择 50 个过时的用户,通过在进程表中插入一条记录来锁定他们,该记录具有我正在更新的用户 ID 范围,这样如果启动了第二个进程,它将不开始处理相同的用户。

总结一下:

  1. 在进程表中选择最后处理的id
  2. 在用户表中选择 50 ids > last processes id
  3. 在进程表中插入一条新记录,其 ids 范围为我将要处理的范围

我想确保如果同时启动 2 个进程(P1 和 P2),则每个进程连续执行 3 个步骤。IE:

  • P1 步骤 1
  • P1 步骤 2
  • P1 步骤 3
  • P2 步骤 1
  • P2 步骤 2
  • P2 步骤 3

并不是

  • P1 步骤 1
  • P2 步骤 1
  • P1 步骤 2
  • 等等

我该怎么做?事务或表锁?还是别的什么?

我的表是 InnoDB 的。

谢谢!

0 投票
1 回答
1212 浏览

sql - SQL Server 如何处理 UPDATE 事务?

我们有一个用于生成唯一数字键的表。然后这些键在其他表中用作 PrimaryKey。表结构是这样的:

所以我们在这张表中有数据

因此,当我们需要表的下一个主键时,Customers我们CurrentKey从该表中获取TableNameis Customers,它将给我们 400,我们将其递增 (400+1) 并且我们也在表中更新此键。所以我们CurrentKey现在是401。

我们为此目的使用的sql是:

SQL1:

我的问题是,如果多个用户同时调用它,我们是否需要锁定表以便密钥不会重复?我确信 SQL Server 不会允许重复数据,但我不知道如何...使用表锁定查询:

SQL2

有人可以解释一下 SQL Server 如何处理UPDATE调用吗?

0 投票
2 回答
3534 浏览

mysql - SELECT ... FOR UPDATE 从多个线程中的一个表

我需要一点帮助SELECT FOR UPDATE(resp. LOCK IN SHARE MODE)

我有一个包含大约 400 000 条记录的表,我需要在每一行上运行两个不同的处理函数。

表结构适当地是这样的:

功能有点不同:

  • 第一个功能- 必须在所有记录上循环运行(非常快),应该根据priority1;选择记录 集data1mtime
  • 第二个功能- 必须在每条记录上只运行一次(非常慢),应该根据priority2;选择记录 集data1mtime

他们不应该同时修改同一行,但是 select 可能会在两者中返回一行(priority1并且priority2具有不同的值),如果是这种情况,事务等待是可以的(我希望这会是唯一会阻塞的情况)。

我正在根据以下查询选择数据:

但我所经历的是,每次只有一个查询返回。

所以我的问题是

  • 是否可以在不同的行(在同一个表中)的两个独立事务中获取两个独立的锁?
  • 我在第一个和第二个查询之间有那么多冲突吗(我在调试时遇到了麻烦,任何关于如何调试的提示SELECT ... FROM (SELECT ...) WHERE ... IN (SELECT)都将不胜感激)?
  • ORDER BY ... LIMIT ...会导致任何问题吗?
  • 索引和键会导致任何问题吗?
0 投票
1 回答
40 浏览

mysql - 如何可靠地插入表中,然后在多用户系统中检索自动编号

假设我运行这样的插入语句:

然后我想检索刚刚插入的行的 id 以在另一个表中使用它。我可以使用 select max() 但我怎么能确定没有其他人做过插入,从而给两个用户相同的最大值来尝试塞进其他表?我很高兴锁定整个表,代码很少运行,不会产生明显的差异。也许我很迂腐,但我想在晚上睡觉,因为我知道我的代码是防弹的。

0 投票
1 回答
1198 浏览

postgresql - plpgsql 函数中的表锁定

假设我编写了执行以下操作的 plpgsql 函数:

第一个问题:

如果我同时调用此函数两次,是否可以在第一次调用仍在运行时第二次调用foobar()删除tmp_foobar表?foobar()

我知道SELECT语句会创建一个ACCESS SHARE锁,但是该锁会持续到语句完成还是直到函数末尾SELECT隐含?COMMIT

第二个问题:

如果后者是真的,第二次foobar()无限期地重试DROP TABLE IF EXISTS tmp_foobar;直到锁被删除还是会在某个时候失败?

0 投票
1 回答
420 浏览

mysql - 大型 UPDATE [...] SELECT FROM 导致并行 UPDATE/DELETE 终止

我试图通过例子来解释我的问题。我有一个长期运行的声明,比如

该语句在大表上运行(其中两个每个表包含 7+ 百万行)。更新运行 3-5 分钟。在另一个会话中以高并发完成

或者

当大UPDATE运行时,这些并发UPDATEDELETES在一两分钟后因锁定等待超时或死锁而死。所有JOIN列都有索引(标准索引)。我已经尝试过

但这无济于事。数据一致性并不是那么重要(如果它包含不再存在于...<table_A>中的行也没问题)。最重要的是,small / s on ...正在处理中。<table_C><table_E>UPDATEDELETE<table_C><table_E>

0 投票
1 回答
49 浏览

mysql - 锁定整个单个表,但仍允许访问 MySQL 上同一会话中的其他表

是否可以为会话锁定 MySQL 上的单个表,并且仍然能够在锁定该表的同一会话上读取和写入其他未锁定的表,而该表仍处于锁定状态?