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

Langage SQL Discussion :

Indiquer dans quel ordre appliquer un batch update ?


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut Indiquer dans quel ordre appliquer un batch update ?
    Bonjour,

    Est-il possible d'indiquer dans une requête de type UPDATE dans quel ordre doivent se pratiquer les updates ?
    Je cherche à augmenter l'ID (integer, primary, autoinc) d'une certaine valeur pour tous les enregistrements d'une table, un simple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE maTable
    SET ID = ID + x
    semblerait faire l'affaire (x étant la valeur à ajouter) mais si il existe déjà des enregistrements avec un ID d'une valeur de "ID + x", ça va coincer !
    Ex: j'ai 15 enregistrements dans ma table, avec des ID de 1 à 15; je souhaite augmenter l'ID de tous les enregistrement d'un valeur x = 10... Pour ID = 1, ID + 10 = 11 -> paf, il existe déjà un enregistrement avec un ID de 11, collision !
    Il faudrait pour bien faire que je commence par la fin, ainsi ID = 15 -> 25 / ID = 14 -> 24 / ID = 13 -> 23, etc. Dans ce cas, plus de collision possible...

    D'où ma question :-)

    Merci.

    PS: je pourrais faire une premier update avec x = 15 puis un second update avec x = -5 mais pour le second update je me retrouverais dans la même situation si je ne peux pas indiquer l'ordre dans lequel faire les updates !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Avec un seul ordre SQL, tout passe dans la même transaction et la contrainte n'est vérifiée qu'à la fin de celle-ci.

    Essayons :
    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
    create table toto
    (
       col   integer,
       constraint pk_toto
         primary key (col)
    );
     
    insert into toto (col) values (1);
    insert into toto (col) values (2);
    insert into toto (col) values (3);
    insert into toto (col) values (4);
    insert into toto (col) values (5);
    insert into toto (col) values (6);
    insert into toto (col) values (7);
    insert into toto (col) values (8);
     
    commit;
     
    select * from toto;
     
    col
    -----------
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    update toto
      set col = col + 2;
     
    select * from toto;
     
    col
    -----------
    3
    4
    5
    6
    7
    8
    9
    10
     
    drop table toto;
    Conclusion : pas de problème

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Ca m'apprendra à capillotracter !
    Merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/04/2009, 19h36
  2. Par où commencer et dans quel ordre ?
    Par Kromagg dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 30/01/2009, 20h52
  3. Dans quel ordre se fait l'évaluation
    Par dj.motte dans le forum C
    Réponses: 12
    Dernier message: 22/08/2008, 23h40
  4. Dans quel ordre ranger les vertices ?
    Par legend666 dans le forum OpenGL
    Réponses: 5
    Dernier message: 10/10/2005, 10h01

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