MySQL UPDATE and SELECT in one pass

后端 未结 6 1376
轮回少年
轮回少年 2020-11-28 14:05

I have a MySQL table of tasks to perform, each row having parameters for a single task.
There are many worker apps (possibly on different machines), performing tasks in

6条回答
  •  鱼传尺愫
    2020-11-28 14:58

    You may create a procedure that does it:

    CREATE PROCEDURE prc_get_task (in_guid BINARY(16), OUT out_params VARCHAR(200))
    BEGIN
    
      DECLARE task_id INT;
    
      SELECT id, out_params
      INTO task_id, out_params
      FROM tasks
      WHERE guid = 0
      LIMIT 1
      FOR UPDATE;
    
      UPDATE task
      SET guid = in_guid
      WHERE id = task_id;
    
    END;
    
    BEGIN TRANSACTION;
    
    CALL prc_get_task(@guid, @params);
    
    COMMIT;
    

提交回复
热议问题