gpt4 book ai didi

mysql - 如何有效地锁定/阻止行?

转载 作者:行者123 更新时间:2023-11-29 15:47:47 25 4
gpt4 key购买 nike

我正在使用 API 为一家公司开发库存系统。我希望能够允许第一个人从 mysql 数据库中选择一行来获得锁定。应拒绝第二个人从第一用户拥有的行集中获取任何数据。这可能吗?

用例中,数据库中的信息是不断被用户添加或更新的。如果用户 A 进行选择,则后面始终会进行更新。但是,如果用户 B 选择在用户 A 完成之前更新信息,则当用户 A 完成时,用户 B 的所有工作都将丢失,反之亦然。

我尝试使用事务,但它并没有阻止第二个用户获取第一个用户请求的行。

start transaction;
select * from peak2_0.staff where 'First Name'='Aj';

update peak2_0.staff set `First Name` = 'aj' where 'First Name'='Aj';
commit;

最佳答案

正如我在评论中提到的,您可以创建一个(或两个)字段,用于在用户处理条目时“锁定”该条目;更多的是一种“停机维护”指示器,而不是实际的服务器锁定。您甚至可以使用如下方式使其原子化且可恢复:

UPDATE someTable 
SET locked_by = client_or_user_id, locked_when = now()
WHERE [criteria for selected the record(s) being worked on]
AND locked_by IS NULL
;

然后您可以从表中进行选择,查看它是否获取了您的程序客户端 ID 或锁定的用户 ID。 “可恢复”是指,如果客户端系统在解锁数据之前出现故障,例行进程(客户端或 MySql 事件)可以释放任何早于特定时间的锁。或者,原始更新以及任何尝试遵守锁的内容都可以将标准锁检查条件调整为类似 AND (locked_by IS NULL OR locked_when < now() - INTERVAL 15 MINUTE) 的内容。

如果编辑客户端需要保持锁定更长时间,只需更新 locked_when 即可做到这一点更进一步的值(value)观;或者您也可以/或者使用“锁定直到”字段。

您甚至可以添加锁定原因,以便尝试访问此类条目的客户端可以获知该条目不可用的原因。

关于mysql - 如何有效地锁定/阻止行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com