MySQL在SELECT上的更新

MySQL在SELECT上的更新,mysql,sql,Mysql,Sql,在MySQL中,是否可以在同一查询上更新所选记录 例如,如果查询 SELECT * FROM `table` WHERE field = "value" LIMIT 0,2 返回两行,然后在同一个查询中,我需要将表的count字段增加1。有可能吗?有可能您可以编写为更新为查询为: UPDATE my_table SET count = count + 1 WHERE field = "value" LIMIT 2; 或对于带有偏移量的限制,请尝试: UPDATE my_ta

在MySQL中,是否可以在同一查询上更新所选记录

例如,如果查询

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

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

有可能您可以编写为更新为查询为:

UPDATE my_table
SET count = count + 1
WHERE field = "value"
LIMIT 2;
或对于带有偏移量的
限制
,请尝试:

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');

你能再精确一点吗?@krammer在选择数据后,我需要将所选行数更新1(以获得显示的次数)。所以我认为最好将两个查询都写为一个,为什么不分别写两个查询呢?您所请求的一个不支持单选query@Udhay:我不认为MySQL有任何类似于PostgreSQL的
更新。。。返回
。您必须编写两个查询。