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

MySQL Discussion :

Mettre à jour toutes les lignes d'une table


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Mettre à jour toutes les lignes d'une table
    Bonjour à tous,

    Je me suis confronté récemment à un petit problème. En fait, j'aimerais trouver le moyen de mettre à jour certaines colonnes d'une table mais les valeurs que je veux y insérer sont (quasiment) toutes différentes, et ce sur toutes les lignes. Prenons par exemple la table

    ____________
    | A | B | C | D |
    |¯¯¯¯¯¯¯¯¯¯¯¯|
    |----------------|
    |----------------|
    |____________|

    gros talent en ASCII art

    Bien, maintenant supposons que ma table soit composée d'environs 10.000 lignes, et que pour chaque lignes, je souhaite mettre à jour la colonne B et C avec à chaque fois des valeurs bien distinctes pour chaque colonne. J'ai tenté plusieurs manières

    • UPDATE ... CASE WHEN ..., mais je trouve cette méthode trop fragile pour la problématique, sachant que le problème sous jacent est lié à la longueur de la requête
    • d'itérer dessus avec JDBC (je code en java) et pour chaque ligne d'utiliser la méthode updateString() puis updateRow() du curseur, mais c'est trop long
    • d'utiliser un update par lot, mais c'est aussi trop long


    Avec des résultats très négatifs (environ 110 secondes) ce qui n'est pas tolérable vis à vis du besoin client (et ce qui est compréhensible).

    J'aimerais trouver la solution optimale à mon problème. Un ami m'a parlé de plusieurs méthodes, comme faire une copie de la table et tout charger dans la table d'origine à la fin, mais je ne vois pas en quoi ça m'aiderait car si je charge ma table d'origine dans une autre table je devrais quand même faire des updates dans cette table temporaire... ou alors d'utiliser un INSERT INTO [table](x, y, z, ...) VALUES(...) ON DUPLICATE KEY UPDATE (...). Je ne sais pas ce que cette méthode va donner mais c'est mon dernier recours je pense, à moins que vous ayiez une meilleure idée?

    D'avance merci pour vos réponses, et je vous souhaite une bonne soirée !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Y a t-il une logique dans les valeurs à modifier et dans les valeurs modifiées ? Les nouvelles valeurs peuvent-elles être le résultat d'un calcul ou obtenue par jointure avec une ou plusieurs autres tables ?

    Décrivez un peu plus précisément votre problème.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Disons que c'est une table contenant à la base des données et parfois des champs vides. Ces champs sont remplis (enrichis) à l'aide d'une liste d'objets retournées par un traitement. Chacune de ces objets contient les informations nécessaires à la mise à jour de ma table. Typiquement, ces objets sont construits lorsque je récupère des informations délivrées par des webservices et sont indépendantes d'autres informations contenues dans des tables, donc non, on ne peux pas les obtenir par jointure. En somme, ces colonnes vont être remplies à l'aide d'informations contenues dans ces objets.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Alors puisque ça vient de traitements applicatifs externes à la BDD, je ne vois pas d'autre solution que de traiter les lignes une par une mais ça peut aller vite si le serveur est correctement dimensionné, la base de données correctement modélisée... bref, le boulot bien fait !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Le problème n'est pas tellement dans le modèle de données, si au final il n'y a aucune application relationnelle ce n'est pas la structure de la base qu'il faut remettre en question (dans ce cas précis) ni la table traitée (ça serait comme critiquer un tableau excel :p). Non, le soucis viendrais dans ce cas du moteur mysql lui même, mais ce serait mentir vu qu'il s'agit plutôt des compétences de ce qui se situe entre le clavier et la chaise ^^. Je cherchais juste le moyen le plus optimal pour la modification de la table.

    Quoiqu'il en soit, merci pour votre réponse !

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le problème n'est pas tellement dans le modèle de données, si au final il n'y a aucune application relationnelle ce n'est pas la structure de la base qu'il faut remettre en question (dans ce cas précis) ni la table traitée (ça serait comme critiquer un tableau excel :p).
    Ben justement, utiliser un SGBD comme un tableur, c'est un peu comme utiliser un marteau pour planter une vis. MySQL n'est peut-être pas le bon outil pour vous. S'il n'y a pas de relations entre données qui puissent être modélisées, alors ne mettez pas vos données dans un SGBD. Utilisez plutôt un fichier, XML par exemple.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Mettre à jour toutes les colonnes d'une table avec MERGE INTO
    Par Andre.lissarrague dans le forum SQL
    Réponses: 9
    Dernier message: 10/12/2013, 10h13
  2. Réponses: 2
    Dernier message: 10/03/2010, 11h50
  3. Réponses: 3
    Dernier message: 28/04/2009, 00h42
  4. Supprime toutes les lignes d'une table fichier
    Par Loko dans le forum WinDev
    Réponses: 38
    Dernier message: 10/12/2007, 16h21
  5. Réponses: 4
    Dernier message: 11/10/2005, 15h03

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