MySQLでqueueのような仕組みを実装するのは最適ではないとわかっていますが、それでもやらないといけないときのためのメモです。
テーブル定義は以下のとおり
create table queue (
id INT UNSIGNED AUTO_INCREMENT,
data BLOB NOT NULL,
status TINYINT UNSIGNED NOT NULL default 0,
);
以下のようなクエリでqueueのリストを取ってきます。
SELECT id,data FROM queue WHERE status=0 LIMIT 100;
実行したいqueueに対して以下のようなクエリを発行します。
UPDATE query SET status=1 WHERE id=xxxx AND status=0;
このクエリのaffected_rowsが
1なら自身が取得できたqueue なので実行、
0なら他のプログラムに取得されてしまったqueue なのでこのqueueに対しては何もしない、
という形で判別可能です。
あとは実行後にqueueを消すなり、statusを終了状態にするなりして終了。