在 MySQL 中,是否可以更新同一查询中的选定记录?
例如,如果查询
SELECT *
FROM `table`
WHERE field = "value"
LIMIT 0,2
返回两行,然后在同一个查询中,我需要将表的count
字段增加 1。这可能吗?
是的,您可以将UPDATE
查询编写为:
UPDATE my_table
SET count = count + 1
WHERE field = "value"
LIMIT 2;
或用于LIMIT
偏移尝试:
UPDATE my_table a
INNER JOIN (SELECT id FROM my_table WHERE field = "value" LIMIT 0, 2) b
ON a.id = b.id
SET count = count + 1;
这是不可能的。动词SELECT
只检索数据(不修改它);动词UPDATE
只修改数据(不检索它)。没有 MySQL 动词可以执行这两种操作。您将不得不使用两个单独的语句。
但是,这两个语句可以封装在事务中(如果您的存储引擎支持),以确保它们以原子方式执行和/或可以从存储过程中调用以简化必须由客户端发出的命令。将两者结合起来将具有:
DELIMITER ;;
CREATE PROCEDURE select_and_update(value TEXT)
BEGIN
START TRANSACTION;
SELECT * FROM `table` WHERE field = value LIMIT 0,2;
UPDATE `table` SET count = count + 1 WHERE ...;
COMMIT;
END;;
DELIMITER ;
然后你的客户只需要做:
CALL select_and_update('value');