MySQL

MySQLでqueueっぽい機能を実装する

More than 3 years have passed since last update.

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を終了状態にするなりして終了。