4

MySQL では、同じクエリで選択したレコードを更新できますか?

たとえば、クエリの場合

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

2 つの行を返し、同じクエリで、テーブルのフィールドを 1 ずつインクリメントする必要がありますcount。それは可能ですか?

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 動詞はありません。2 つの別個のステートメントを使用する必要があります。

ただし、これら 2 つのステートメントをトランザクション内にカプセル化して (ストレージ エンジンでサポートされている場合)、アトミックに実行したり、ストアド プロシージャ内から呼び出して、クライアントが発行する必要があるコマンドを簡素化したりすることができます。2つを組み合わせると、次のようになります。

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 に答える