Мне потребовалось много времени, чтобы понять это. И некоторые читают официальную документацию, на самом деле не указывает, как, но как только я знаю использование @
и :=
, я могу понять, как это работает.
@
для Пользовательские переменные
:=
для operator_assign-value
Итак, первым шагом было назначьте значение переменной по умолчанию для запущенного «автоинкремента», введя:
SET @i := 0;
Затем в запросе вы просто напишите:
SELECT @i:=@i+1;
Давайте разберем это. На первом этапе я назначил @i
значение равным 0
. Если я напишу SELECT @i;
после того, как я их установлю, он обязательно вернет 0
, так как я уже назначил его. Затем я go на следующий запрос, который используется, дает значение "автоинкремент". Что заставляет меня спрашивать, если я устанавливаю переменную @i
как 0
, разве она не должна снова вернуть назначенное значение в следующей строке? Что ж, если вы оглянетесь на запрос, он на самом деле переназначает переменную @i
:

У меня также есть подготовленный пример скрипки с некоторыми пояснениями.
Это может быть не так, как это официально работает, но я так понимаю.