ALTER TABLE
deve contenere valori letterali al momento dell'analisi dell'istruzione (cioè al momento della preparazione).
Non puoi inserire variabili o parametri nell'istruzione al momento dell'analisi, ma puoi inserire variabili nell'istruzione prima analizzare il tempo. E questo significa usare SQL dinamico:
SET @new_index = (SELECT MAX(id) FROM sales );
SET @sql = CONCAT('ALTER TABLE sales AUTO_INCREMENT = ', @new_index);
PREPARE st FROM @sql;
EXECUTE st;