Я гуглил и нашел этот вопрос, но ответ, который я действительно ищу, удовлетворяет двум критериям:
- с использованием чисто MySQL запросов
- сбросить существующее табличное автоинкремент до max (id) + 1
Так как я не смог найти именно то, что я хочу, я выложил ответ из разных ответов и поделился им здесь.
Несколько замечаний:
- рассматриваемая таблица InnoDB
- таблица использует поле
id
с типом int
в качестве первичного ключа
- единственный способ сделать это исключительно в MySQL - это использовать хранимую процедуру
- мои изображения ниже используют SequelPro в качестве графического интерфейса. Вы должны иметь возможность адаптировать его на основе предпочитаемого вами редактора MySQL
- Я проверял это на MySQL Ver 14.14 Distrib 5.5.61, для debian-linux-gnu
Шаг 1. Создание хранимой процедуры
создайте хранимую процедуру следующим образом:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Тогда запустите.
Перед запуском это выглядит так, когда вы смотрите в разделе «Хранимые процедуры» в вашей базе данных.
![enter image description here](https://i.stack.imgur.com/JiTIh.png)
Когда я запускаю, я просто выбираю хранимую процедуру и нажимаю Run Selection
![enter image description here](https://i.stack.imgur.com/By5vB.png)
Примечание: разделители имеют решающее значение. Следовательно, если вы копируете и вставляете сверху выбранные ответы в этом вопросе, по этой причине они, как правило, не работают.
После запуска я должен увидеть хранимую процедуру
![enter image description here](https://i.stack.imgur.com/xyZzP.png)
Если вам нужно изменить хранимую процедуру, вам нужно удалить хранимую процедуру, а затем выбрать для повторного запуска.
Шаг 2: вызов хранимой процедуры
На этот раз вы можете просто использовать обычные запросы MySQL.
call reset_autoincrement('products');
Первоначально из моих собственных заметок по SQL-запросам в https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc и адаптированных для StackOverflow