Этот вопрос по сути является повторением этого другого . Вкратце, преимущество поля автоинкремента состоит в том, что значение гарантировано уникально, а недостатком является то, что значение не существует до тех пор, пока INSERT уже не будет выполнен.
Это обязательно дело. Например, вы можете получить для данной таблицы значение следующего значения автоматического приращения, но из-за проблем с параллелизмом вы не можете быть уверены, что запрос , который вы выполните следующим, будет таким этот идентификатор. Кто-то другой может принять это первым. Следовательно, назначение поля ID должно быть атомарной операцией получения и приращения, которая происходит при вставке записи.
Другими словами, хотя вы можете хотеть сделать это в одном запросе, вы просто не собираетесь этого делать. Есть способ, которым вы теоретически можете притвориться, что выполняете только один запрос, добавив триггер INSERT, который добавляет ваше альтернативное представление поля ID после факта. Кроме того, вы можете использовать поле идентификатора без автоматического увеличения, основанное на чем-то заранее известном.