2010-02-09 4 views
0

Рассмотрима следующего 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.

ответ

0

Это ошибка ... http://bugs.mysql.com/bug.php?id=28781

Не уверен, почему клиент работает 3 года старая версия MySQL с.

+0

Из этого билета: * «Я закрываю это как« не ошибка ». Поведение auto_increment можно контролировать с помощью параметра конфигурации (как упоминалось ранее), и ожидаются пробелы в значениях autoinc. Я хочу, чтобы мы добавили больше документации, чтобы прояснить этот момент. »* –

Смежные вопросы