Почему MySQL не сразу фиксирует результат UPDATE?
Может есть какая-то функция закрытия запроса и процесс будет висеть пока MySQL не закончит?А какая разница, запаралеллится другой процесс PHP, пока тот будет висеть занимая пул, откроет новое соединение и сделает то же самое. Вы же не думаете, что PHP обрабатывает всех клиентов в 1 поток/скрипт? Пишите лог запросов, которые выполняются и будем разбираться, от чего именно такой порядок запросов, а а не какой-то другой.
А вообще, в MySQL есть транзакции и блокировки, которые как раз защищают от таких случаев, когда кто-то что-то куда-то не успел, или не записал или... Попробуйте использовать их. Главное, не забудьте, что все операции записи/обновления должны проходить в одной транзакции, тогда подобных проблем не возникнет с вероятностью близкой к абсолюту.
Скорее всего 2 скрипта одновременно запрашивают предыдущий номер, что вполне может быть, соответственно один делает +1 и другой +1 и новый номер выходит одинаковый. Как вариант надо поставить на столбец с позицией индекс типа UNIQUE если это возможно и в этом случае 2 записи с одинаковой позицией не смогут существовать.
Сложно сказать что у вас наверняка, но есть ощущение что копать надо в сторону JS либо проблем в области обмена данными PHP-JS но уж никак не MySQL
На крайняк замерьте время update что б не думалось...
Считывание номера предыдущего файла и обновление у нового (или его добавление) можно обернуть в транзакцию тогда второй запущенный экземпляр скрипта не сможет вмешаться.