gpt4 book ai didi

mysql - mysql 事务期间锁定表

转载 作者:行者123 更新时间:2023-11-29 17:54:09 27 4
gpt4 key购买 nike

我正在使用 PHP 运行多个 mysql 查询来更改多个表中的值。

基本上是这样的(简化的伪代码)

$amount = (SELECT amount FROM wallet WHERE id = 1);
$amount = somelongcomplicatedtask($amount);
(UPDATE wallet SET amount = $amount WHERE id = 23);

可能有许多脚本并行使用 mysql 数据库(写入/读取),我需要确保确保以下几点:

  • 如果其中一个查询失败,则迄今为止完成的所有工作都会恢复(我可以为此使用 TRANSACTIONS)
  • 当我处理表钱包中的两行(1 和 23)时,它们需要被锁定,因此任何想要读取或写入它们的进程(当前进程除外)都必须等待。 (如果不可能只锁定行,锁定整个表也可以)

该表使用InnoDB引擎。

问题是,如果我使用LOCK TABLES wallet WRITE锁定表,然后运行START TRANSACTION,这将清除锁定。如果我首先运行START TRANSACTION,然后使用LOCK TABLES锁定表,那么锁将提交已启动的事务...这两件事只会相互关闭,但我需要它们同时处于事件状态。

处理这个问题的最佳方法是什么?

最佳答案

MySQL InnoDB 存储引擎已经支持行级锁定。在这种情况下,您必须对该特定行采取独占锁,以便其他事务将等待,直到第一个事务释放他的锁。更多信息:InnoDB Locking Explained

关于mysql - mysql 事务期间锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009710/

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