MySQL UPDATE on SELECT

4
在MySQL中,是否可以在同一查询中更新选定的记录?
例如,如果查询:
 SELECT * 
   FROM `table`
  WHERE field = "value"
  LIMIT 0,2

我需要返回两行结果,并在同一条查询中将表格的count字段增加1。这是可能的吗?


你能再精确一点吗? - krammer
@krammer 我需要在选择数据后将选定行的计数增加1(以获得其显示次数)。因此,我认为最好将两个查询合并成一个。 - Stranger
为什么不写成两个单独的查询呢?你所要求的内容无法在单个查询中得到支持。 - Madhivanan
@UdhayпјҡжҲ‘и®ӨдёәMySQLжІЎжңүзұ»дјјдәҺPostgreSQLзҡ„UPDATE ... RETURNINGгҖӮдҪ йңҖиҰҒзј–еҶҷдёӨдёӘжҹҘиҜўгҖӮ - user330315
2个回答

5

是的,您可以编写如下的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;

0

这是不可能的。动词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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接