INSERT ON DUPLICATE KEY et auto-incrément

Fermé
Utilisateur anonyme - 10 août 2018 à 11:45
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 10 août 2018 à 18:32
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
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 août 2018 à 13:49
Bonjour,

Il faudrait nous montrer ta requête.
Ceci dit, est-ce vraiment un problème ?

Xavier
0
Utilisateur anonyme
10 août 2018 à 14:21
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 :-)
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 août 2018 à 15:14
(SELECT MAX(id) + 1)

Il faut voir les sous-requêtes comme des requêtes à part entière : si tu l'exécutes seule elle doit fonctionner. Donc là, il te manque toute la partie FROM et éventuellement WHERE
0
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
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 août 2018 à 16:09
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 ?
0
Pinzou76 Messages postés 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
10 août 2018 à 16:11
Bonjour,
Je me pose la même question... Pourquoi ne pas utiliser une clé AUTO_INCREMENT, qui te permettrait de ne pas te soucier de l'ID puisque l'ajout est automatique ?
0