ALTER TABLE
трябва да има литерални стойности в него до момента, в който изразът се анализира (т.е. по време на подготовка).
Не можете да поставите променливи или параметри в израза по време на синтактичен анализ, но можете да поставите променливи в оператора преди време за синтактичен анализ. А това означава използване на динамичен SQL:
SET @new_index = (SELECT MAX(id) FROM sales );
SET @sql = CONCAT('ALTER TABLE sales AUTO_INCREMENT = ', @new_index);
PREPARE st FROM @sql;
EXECUTE st;