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