Search code examples
sqlmysqlauto-incrementreset

How can I reset an MySQL AutoIncrement using a MAX value from another table?


I know this won't work. I tried it in various forms and failed all times. What is the simplest way to achieve the following result?

ALTER TABLE XYZ AUTO_INCREMENT = (select max(ID) from ABC);

This is great for automation projects.

SELECT @max := (max(ID)+1) from ABC;        -> This works!
select ID from ABC where ID = (@max-1);     -> This works!
ALTER TABLE XYZ AUTO_INCREMENT = (@max+1);  -> This fails :( Why?

Solution

  • Use a prepared statement:

      SELECT @max := MAX(ID)+ 1 FROM ABC;
    
      PREPARE stmt FROM 'ALTER TABLE ABC AUTO_INCREMENT = ?';
      EXECUTE stmt USING @max;
    
      DEALLOCATE PREPARE stmt;