2010-02-09 4 views
0

Tenir compte l'instruction SQL suivante:MySQL Duplicate KEY semble incrémenter la colonne auto_increment enclenchent le processus

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; 

Et remarquez maintenant le jeu de résultats. L'auto_increment a été augmenté malgré l'insertion de rien.

+------------+---------------------+-------+ 
| pkUSER1_ID | DATE_UPDATED  | NAME | 
+------------+---------------------+-------+ 
|   1 | 2010-02-09 13:29:15 | asdf | 
|   3 |    NULL | asdf1 | 
+------------+---------------------+-------+ 

j'obtenir un comportement différent sur deux serveurs distincts ... la sortie ci-dessus est de MySQL v5.0.45 en cours d'exécution sur 2.6.9-023stab048.6-entreprise (je pense qu'il est Red Hat). Le problème n'existe pas sur MySQL v5.0.51a-24 + lenny2-log fonctionnant sur 2.6.26-2-amd64 (qui est évidemment Debian).

Existe-t-il un paramètre de configuration que je peux modifier pour éviter cela? J'ai environ 300 utilisateurs dans ma base de données, mais en raison de la fréquence d'exécution de l'instruction insert/update, l'ID utilisateur le plus récent est supérieur à 600 000.

Répondre

0

Ceci est un bug ... http://bugs.mysql.com/bug.php?id=28781

Je ne sais pas pourquoi le client exécute une version de 3 ans de MySQL.

+0

De ce billet: * «Je ferme ça comme 'pas un bug'. Le comportement de auto_increment peut être contrôlé via le paramètre config (comme mentionné précédemment) et les écarts dans les valeurs autoinc sont attendus. Je m'assurerai que nous ajoutons plus à la documentation pour clarifier ce point. »* –

Questions connexes