2009年06月02日

[MySQL] 利用可能な最少の(空きの)IDを取得する

MySQLで一意のIDを使用するにはauto_incrementを使えば通常問題ないのですが、レコードを削除した場合、IDが一つ空いた状態になります。 通常はそれで問題ありませんが。

場合によっては、空いたIDを優先的に使用したい場合もあります。調べてみたところ、MySQLはそのような機構を提供していないので、以下のSQLで求めることにしました。

# 最も小さい利用可能なIDを探す

select min(t_getnewid.inc_id) newid from 
(
	select t_orig.myid, t_inc.inc_id from

	# オリジナルの表
	(
		select (IDフィールドの名前) myid from (テーブル名)
	) t_orig

	# インクリメントした表を外部結合
	right join
	(
		select 1 inc_id union # IDの最小値が1の場合
		select (IDフィールドの名前) + 1 inc_id from (テーブル名)
	) t_inc
	on t_orig.myid = t_inc.inc_id

) t_getnewid
where t_getnewid.myid is null
posted by dev-man at 09:49| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック