Мы с вами точно говорим об одном и том же?
Моя точка зрения:
Пускай даны записи ((1, *), (2, *), (3, *), (4, *), (5, *), (6, *), (7, *), (8, *), (9, *), (10, *)).
Ваш алгоритм работает -
mysql_insert_id() возвращает 10, добавление не происходит.
Но вот в какой-то момент исчезают записи (3,*), (7,*), (4,*). Имеем теперь набор ((1, *), (2, *), (5, *), (6, *), (8, *), (9, *), (10, *)).
mysql_insert_id() по-прежнему возвращает 10, алгоритм не работает - запись добавить-то можно.
В PostgreSQL немного иной принцип работы этих счетчиков - можно оперировать ими как необходимо то. В MySQL этого нет, посему есть лишь два способа переопределить поведение поля
auto_increment: - truncate table - удаляет все записи из таблицы и обнуляет счетчик
- вручную перебрать все записи и позадавать им новые значения поля. Но при этом необходимо либо иметь триггер, который будет обновлять все зависимые записи, либо предусмотреть запросы на ручное исправление зависимостей
А что имеете ввиду вы?