IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème avec le ON DUPLICATE KEY UPDATE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut Problème avec le ON DUPLICATE KEY UPDATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Lexidia_preferences (mail,texte)
    VALUES ("romandiezpro@gmail.com","texte")
    ON DUPLICATE KEY UPDATE texte="texte"
    WHERE mail = "romandiezpro@gmail.com"
    Bonjour la requête ci dessus marche sans la ligne avec le WHERE. Mais quand je met le WHERE ça ne marche pas.
    Vous avez une idée svp ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    bonjour,

    Supprimez le WHERE, tout simplement

    cf. https://dev.mysql.com/doc/refman/8.0...duplicate.html

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut
    ok merci

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 914
    Par défaut
    Salut à tous.

    Citation Envoyé par zeid0ne
    la requête ci dessus marche sans la ligne avec le WHERE.
    Mais quand je met le WHERE ça ne marche pas.
    Vous avez une idée svp ?
    On peut utiliser la solution proposée par Ecartefigue :
    Citation Envoyé par Escartefigue
    Supprimez le WHERE, tout simplement
    Mais cela risque de ne pas fonctionner parce que l'insertion ou la mise à jour dépend de la colonne 'mail'.
    Est-ce que cette colonne possède un "unique index" ?
    Voire mon exemple ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`     integer unsigned  not null auto_increment primary key,
      `mail`   varchar(255)      not null,
      `texte`  varchar(255)      not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`mail`,`texte`) VALUES
      ('romandiezpro@gmail.com','bla bla bla')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------------------+-------------+
    | id | mail                   | texte       |
    +----+------------------------+-------------+
    |  1 | romandiezpro@gmail.com | bla bla bla |
    +----+------------------------+-------------+
    --------------
    commit
    --------------
     
    --------------
    INSERT INTO `test` (`mail`,`texte`) VALUES
      ('romandiezpro@gmail.com','texte')
    ON DUPLICATE KEY UPDATE texte='texte'
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------------------+-------------+
    | id | mail                   | texte       |
    +----+------------------------+-------------+
    |  1 | romandiezpro@gmail.com | bla bla bla |
    |  2 | romandiezpro@gmail.com | texte       |
    +----+------------------------+-------------+
    --------------
    rollback
    --------------
     
    --------------
    create unique index `idx` USING BTREE on `test` (`mail`)
    --------------
     
    --------------
    INSERT INTO `test` (`mail`,`texte`) VALUES
      ('romandiezpro@gmail.com','texte')
    ON DUPLICATE KEY UPDATE texte='texte'
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------------------+-------+
    | id | mail                   | texte |
    +----+------------------------+-------+
    |  1 | romandiezpro@gmail.com | texte |
    +----+------------------------+-------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Si vous désirez gérer à la fois l'insertion et la mise à jour, vous devez créer un index unique sur la colonne "mail".
    Or dans les explications d'Escartefigue, rien n'indique que cela soit le cas.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur ON DUPLICATE KEY UPDATE
    Par LostRailler dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2011, 12h13
  2. PB de doublons avec ON DUPLICATE KEY UPDATE
    Par Seeker35 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2011, 15h47
  3. mysql - problème avec une requete ajout
    Par mekongboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 18h17
  4. INSERT ... ON DUPLICATE KEY UPDATE
    Par luffy san dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/10/2005, 17h29
  5. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo