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