Требуется ли, чтобы новый идентификатор также был случайным? Если это так, лучший ответ - просто перебрать (рандомизировать, проверить на существование), пока вы не найдете тот, который не существует.
Если данные просто оказываются случайными, но это не является сильным ограничением, вы можете просто использовать SELECT MAX (idcolumn), увеличивать его в соответствии с данными и использовать их как первичный ключ для вашей следующей записи.
Вы должны сделать это атомарно, поэтому либо заблокируйте таблицу, либо используйте какой-либо другой элемент управления параллелизмом, соответствующий вашей конфигурации и схеме БД. Хранимые процы, блокировки таблиц, блокировки строк, SELECT ... ДЛЯ ОБНОВЛЕНИЯ, что угодно.
Обратите внимание, что при любом подходе вам может потребоваться обработка неудачных транзакций. Теоретически вы можете получить повторяющиеся проблемы с ключами в первой (хотя это маловероятно, если ваше пространство ключей мало заполнено), и вы, скорее всего, получите тупики на некоторых БД с подходами, подобными SELECT ... FOR UPDATE. Поэтому обязательно проверьте и перезапустите транзакцию при ошибке.