シャーディング時の AUTO INCREMENT

シャーディングする時に MySQL の AUTO INCREMENT は使えないので、
どうしたら実装できるのかなと・・・・。

答えは簡単で、
Oracle / PostgreSQL の 「シーケンス」っていう機能をマネすればいい。

シーケンスは異なるテーブル間でユニークなIDを管理するための機能。
ちなみにOracleには AUTO INCREMENT がないから、
代わりにシーケンスを使う。

ただ、MySQLにはシーケンスがないから採番テーブルを使う。
MySQL公式サイトの
「 LAST_INSERT_ID(), LAST_INSERT_ID(expr)」の説明にありました。
http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html

CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);
UPDATE sequence SET id=LAST_INSERT_ID(id+1);
SELECT LAST_INSERT_ID();

以上です。