LoginSignup
9
11

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-02-24

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

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11