4

在 MySQL 中,是否可以更新同一查询中的选定记录?

例如,如果查询

 SELECT * 
   FROM `table`
  WHERE field = "value"
  LIMIT 0,2

返回两行,然后在同一个查询中,我需要将表的count字段增加 1。这可能吗?

4

2 回答 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;
于 2012-07-26T10:05:40.847 回答
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');
于 2012-07-26T10:20:33.220 回答