Сотрудник только что заставил меня осознать очень странное поведение MySQL.
Предполагается, что у вас есть таблица с полем auto_increment и другим полем, для которого установлено уникальное значение (например, поле имени пользователя). При попытке вставить строку с именем пользователя, которое уже есть в таблице, вставка завершается неудачно, как и ожидалось. Тем не менее, значение auto_increment увеличивается, что видно при вставке действительной новой записи после нескольких неудачных попыток.
Например, когда наша последняя запись выглядит так ...
ID: 10
Username: myname
... и мы попробуем пять новых записей с тем же значением имени пользователя на нашей следующей вставке, мы создадим новую строку примерно так:
ID: 16
Username: mynewname
Хотя это не является большой проблемой само по себе, похоже, что это очень глупый вектор атаки, чтобы убить таблицу, заполняя ее неудачными запросами на вставку, как говорится в справочном руководстве MySQL:
"Поведение механизма автоинкремента не определено, если [...] значение становится больше максимального целого числа, которое может быть сохранено в указанном целочисленном типе."
Это ожидаемое поведение?