问题标签 [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.
mysql - Mysql为每个用户插入连续的行
我有一个名为“picks”的表,当用户登录并开始选择时,它最初会在该用户的“picks”表中插入 64 行(将用户 ID 作为列)。这些行是使用 php 中的循环插入的,因此使用 PDO 准备语句有 64 个插入。每个用户只需执行一次。我需要这些行对于该用户是连续的。如果其他几个用户在同一时间做同样的事情怎么办?是否有可能不会连续插入行?我需要使用表锁吗?我以前从未使用过它们。MySql 版本:5.0.92-rs-log MyISAM 谢谢
sql-server - SQL Server 中的 MS Access 锁定表?
我已经使用 SQL Server 2 年多了,但我是 MS Access 的新手。我刚刚开始将 MS Access 视为访问 SQL Server 的潜在前端/门户,我正在与一位同事交谈,他说如果我的表单不是,我应该警惕 MS Access 锁定 SQL 表的可能性t 编码正确。我以前经历过桌子锁,并且可以理解它们是多么令人沮丧。我的同事提到使用一种称为“传递”的方法来解决问题。谁能帮助我解释正在发生的事情以及“通过”如何解决问题?
mysql - MySQL在没有自动增量的情况下获得下一个唯一值
我有一个 MySQL 数据库 (InnoDB),我正在开发用于跟踪我组织中的工单。有多个“站点”,每个站点的工单编号从 100 开始。
WorkorderID是自动增量字段。
SiteID和SiteWorkorderNum都设置为唯一约束。
每当要为特定站点插入新的工作订单时,应用程序都会检查登录者的 siteid 的 max(SiteWorkorderNum),并将该值返回到插入语句。我要避免的问题是,如果同一站点的两个用户都同时输入新的工作订单。
我有几个可能的解决方案,但我想看看是否有更好的方法,因为每个都有它的缺点,但我确信一个会比另一个更好,当然我对新想法持开放态度。
1)锁定表以保证在我们检索并插入我们的值之前没有其他用户检索 SiteWorkorderNum 值(但是假设我们每分钟有成千上万的用户试图输入工作订单,表锁不会减慢速度吗? )
2)不要锁定表,并检索下一个可用的 SiteWorkorderNum 并尝试插入到数据库中,如果我收到唯一约束错误,则捕获错误并重试,直到我成功。(这可能会释放表,但再次假设我们在同一个站点有数千个用户,多个数据库调用会有点低效吗?)
我是否对这些解决方案中的任何一个“可能”影响性能过于偏执?当然,我没有成千上万的用户,但我想在这个设计中应用最佳实践,以防我曾经从事过流量很大的项目。
mysql - 我应该使用表锁还是事务?
我有 2 个表,一个称为 user,用于存储用户,另一个称为 process,用于存储更新用户的活动进程列表。
我想要做的是能够选择 50 个过时的用户,通过在进程表中插入一条记录来锁定他们,该记录具有我正在更新的用户 ID 范围,这样如果启动了第二个进程,它将不开始处理相同的用户。
总结一下:
- 在进程表中选择最后处理的id
- 在用户表中选择 50 ids > last processes id
- 在进程表中插入一条新记录,其 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 的。
谢谢!
sql - SQL Server 如何处理 UPDATE 事务?
我们有一个用于生成唯一数字键的表。然后这些键在其他表中用作 PrimaryKey。表结构是这样的:
所以我们在这张表中有数据
因此,当我们需要表的下一个主键时,Customers
我们CurrentKey
从该表中获取TableName
is Customers
,它将给我们 400,我们将其递增 (400+1) 并且我们也在表中更新此键。所以我们CurrentKey
现在是401。
我们为此目的使用的sql是:
SQL1:
我的问题是,如果多个用户同时调用它,我们是否需要锁定表以便密钥不会重复?我确信 SQL Server 不会允许重复数据,但我不知道如何...使用表锁定查询:
SQL2
有人可以解释一下 SQL Server 如何处理UPDATE
调用吗?
mysql - SELECT ... FOR UPDATE 从多个线程中的一个表
我需要一点帮助SELECT FOR UPDATE
(resp. LOCK IN SHARE MODE
)。
我有一个包含大约 400 000 条记录的表,我需要在每一行上运行两个不同的处理函数。
表结构适当地是这样的:
功能有点不同:
- 第一个功能- 必须在所有记录上循环运行(非常快),应该根据
priority1
;选择记录 集data1
和mtime
- 第二个功能- 必须在每条记录上只运行一次(非常慢),应该根据
priority2
;选择记录 集data1
和mtime
他们不应该同时修改同一行,但是 select 可能会在两者中返回一行(priority1
并且priority2
具有不同的值),如果是这种情况,事务等待是可以的(我希望这会是唯一会阻塞的情况)。
我正在根据以下查询选择数据:
但我所经历的是,每次只有一个查询返回。
所以我的问题是:
- 是否可以在不同的行(在同一个表中)的两个独立事务中获取两个独立的锁?
- 我在第一个和第二个查询之间有那么多冲突吗(我在调试时遇到了麻烦,任何关于如何调试的提示
SELECT ... FROM (SELECT ...) WHERE ... IN (SELECT)
都将不胜感激)? ORDER BY ... LIMIT ...
会导致任何问题吗?- 索引和键会导致任何问题吗?
mysql - 如何可靠地插入表中,然后在多用户系统中检索自动编号
假设我运行这样的插入语句:
然后我想检索刚刚插入的行的 id 以在另一个表中使用它。我可以使用 select max() 但我怎么能确定没有其他人做过插入,从而给两个用户相同的最大值来尝试塞进其他表?我很高兴锁定整个表,代码很少运行,不会产生明显的差异。也许我很迂腐,但我想在晚上睡觉,因为我知道我的代码是防弹的。
postgresql - plpgsql 函数中的表锁定
假设我编写了执行以下操作的 plpgsql 函数:
第一个问题:
如果我同时调用此函数两次,是否可以在第一次调用仍在运行时第二次调用foobar()
删除tmp_foobar
表?foobar()
我知道SELECT
语句会创建一个ACCESS SHARE
锁,但是该锁会持续到语句完成还是直到函数末尾SELECT
隐含?COMMIT
第二个问题:
如果后者是真的,第二次foobar()
无限期地重试DROP TABLE IF EXISTS tmp_foobar;
直到锁被删除还是会在某个时候失败?
mysql - 大型 UPDATE [...] SELECT FROM 导致并行 UPDATE/DELETE 终止
我试图通过例子来解释我的问题。我有一个长期运行的声明,比如
该语句在大表上运行(其中两个每个表包含 7+ 百万行)。更新运行 3-5 分钟。在另一个会话中以高并发完成
或者
当大UPDATE
运行时,这些并发UPDATE
并DELETES
在一两分钟后因锁定等待超时或死锁而死。所有JOIN
列都有索引(标准索引)。我已经尝试过
但这无济于事。数据一致性并不是那么重要(如果它包含不再存在于...<table_A>
中的行也没问题)。最重要的是,small / s on ...正在处理中。<table_C>
<table_E>
UPDATE
DELETE
<table_C>
<table_E>
mysql - 锁定整个单个表,但仍允许访问 MySQL 上同一会话中的其他表
是否可以为会话锁定 MySQL 上的单个表,并且仍然能够在锁定该表的同一会话上读取和写入其他未锁定的表,而该表仍处于锁定状态?