ALTER TABLE
musi zawierać wartości dosłowne przed analizą instrukcji (tj. w czasie przygotowania).
Nie możesz umieścić zmiennych ani parametrów w instrukcji w czasie analizy, ale możesz umieścić zmienne w instrukcji przed parsować czas. A to oznacza używanie dynamicznego 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;