Рассмотрима следующего SQL:MySQL дублирования KEY кажется, увеличивает столбец AUTO_INCREMENT при запуске
CREATE TABLE USER1
(
pkUSER1_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
DATE_UPDATED TIMESTAMP NULL DEFAULT NULL,
NAME VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (pkUSER1_ID),
CONSTRAINT UNIQUE (NAME)
)
ENGINE = INNODB;
INSERT INTO USER1
SET NAME = 'asdf'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
INSERT INTO USER1
SET NAME = 'asdf'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
INSERT INTO USER1
SET NAME = 'asdf1'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
SELECT * FROM USER1;
А теперь обратите внимание на набор результатов. Auto_increment был увеличен, несмотря на то, что ничего не вставлено.
+------------+---------------------+-------+
| pkUSER1_ID | DATE_UPDATED | NAME |
+------------+---------------------+-------+
| 1 | 2010-02-09 13:29:15 | asdf |
| 3 | NULL | asdf1 |
+------------+---------------------+-------+
я получаю различное поведение на двух разных серверах ... выход выше из MySQL v5.0.45 работает на 2.6.9-023stab048.6-предприятие (я думаю, что Red Hat). Проблема не существует в MySQL v5.0.51a-24 + lenny2-log, работающем на 2.6.26-2-amd64 (что, очевидно, Debian).
Есть ли настройка конфигурации, которую я могу изменить, чтобы этого избежать? У меня около 300 пользователей в моей базе данных, но из-за частоты, с которой выполняется инструкция insert/update, последний идентификатор пользователя составляет более 600 000.
Из этого билета: * «Я закрываю это как« не ошибка ». Поведение auto_increment можно контролировать с помощью параметра конфигурации (как упоминалось ранее), и ожидаются пробелы в значениях autoinc. Я хочу, чтобы мы добавили больше документации, чтобы прояснить этот момент. »* –