INSERT ON DUPLICATE KEY et auto-incrément
Utilisateur anonyme
-
Reivax962 Messages postés 3742 Statut Membre -
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,
J'ai une requête qui tourne quotidiennement dans un script et qui vient ajouter une ligne dans une table sur une valeur n'existe pas déjà dans un champ.
J'utilise donc un INSERT ON DUPLICATE KEY UPDATE.
Sauf que l'INSERT passe sur toutes les lignes déjà présentes dans la table et simule un INSERT. L'auto-incrémente prend un +1 à chaque fois.
Sauf que lorsque j'ai vraiment une donnée qui s'ajoute, il y a un écart entre le dernier ID et le nouveau.
Avez-vous des pistes pour palier à ce problème ?
Merci de votre aide
J'ai une requête qui tourne quotidiennement dans un script et qui vient ajouter une ligne dans une table sur une valeur n'existe pas déjà dans un champ.
J'utilise donc un INSERT ON DUPLICATE KEY UPDATE.
Sauf que l'INSERT passe sur toutes les lignes déjà présentes dans la table et simule un INSERT. L'auto-incrémente prend un +1 à chaque fois.
Sauf que lorsque j'ai vraiment une donnée qui s'ajoute, il y a un écart entre le dernier ID et le nouveau.
Avez-vous des pistes pour palier à ce problème ?
Merci de votre aide
1 réponse
-
Bonjour,
Il faudrait nous montrer ta requête.
Ceci dit, est-ce vraiment un problème ?
Xavier-
Voici ma requête :
INSERT INTO servers (id, champA, champB) VALUES ((SELECT MAX(id) + 1), '{champA}', '{champB}') ON DUPLICATE KEY UPDATE champA = '{champA}';
Celle ci ne fonctionne pas et mysql m'indique que le champ "id" n'existe pas dans la sous-requête : (SELECT MAX(id) + 1)
Est-ce vraiment un problème ?
Le compteur des ID monte vite. Autant avoir une base propre dès le départ :-) -
-
Je pensais comme toi au départ mais quand je mets le FROM, étant donné que je fais une requête dans la même table que l'INSERT, ça fait double emploi et MySQL me le fait remarquer :
_mysql_exceptions.OperationalError: (1093, "Table 'servers' is specified twice, both as a target for 'INSERT' and as a separate source for data")
Quand je fais une requête basique depuis la console MySQL, ça fonctionne mais depuis mon script Python c'est là que ça coince -
J'ai deux questions :
1 - Pourquoi ne pas utiliser un vrai AUTO INCREMENT ?
2 - Il y a un truc qui m'échappe en fait.
Dans ta requête (en supposant qu'elle fonctionne), le ON DUPLICATE KEY ne peut jamais se déclencher puisque tu mettras toujours un id supérieur au plus grand. id, c'est bien la clef primaire de ta table ? -
-