MySQL InnoDB 全局变量?

标签 mysql sql sql-update innodb

我想执行这段代码: 这个想法是获取尚未使用的具有最低 MID 的项 (mutex = 0)。为了防止其他线程读取此行,使用 FOR UPDATE 并且 UPDATE 减少了 mutex

START TRANSACTION;
SELECT MID as m, sender, receiver, content FROM queue WHERE mutex = 0 ORDER BY MID ASC limit 1 FOR UPDATE; 
UPDATE queue set mutex = -1 WHERE MID = m;
COMMIT;

但是 m 只有在执行 SELECT 行时才知道。我如何在下一个查询中访问它,而不中断查询,这将停止 TRANSACTION

P.S.:我知道互斥量与我使用它的目的不同。

最佳答案

你可以使用一个变量:

START TRANSACTION;
SELECT @m:=MID, sender, receiver, content FROM queue WHERE mutex = 0 ORDER BY MID ASC limit 1 FOR UPDATE; 
UPDATE queue set mutex = -1 WHERE MID = @m;
COMMIT;

关于MySQL InnoDB 全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452045/

相关文章:

mysql - SQL 如何通过 INNER JOIN 更新 -

sql-server - 使用一对多 JOIN 进行更新(多列)

python - 使用 Flask 在另一个函数中使用函数中的变量

php - yii 2 参数未在 updateAll 函数中正确绑定(bind)

php - 如何在 ubuntu 上将 MySQL 主机设置为 'localhost' 以外的其他值?

java - 如何使用 JOOQ 在 PostgreSQL 中插入带有 JSON 列的可更新记录?

Mysql/Mariadb查询在查询数据时动态地将行转换为列

mysql - 根据其中一个表中特定列中的最大值返回 JOIN 结果

mysql - GROUP BY 聚合和 INNER JOIN

mysql - Update if exists else 插入,但具有非唯一列