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

PHP & Base de données Discussion :

Connaitre le nombre de lignes affectées par un update à l'avance [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 63
    Points
    63
    Par défaut Connaitre le nombre de lignes affectées par un update à l'avance
    Bonjour,

    tout est dit dans le titre :

    Comment connaitre le nombre de lignes affectées par un update à l'avance ?
    C'est-à-dire, sans faire le valider (sans commit).

    Pour mon appli, je veux être sûr qu'il est n'y ait pas plus d'une ligne à jour (surtout pour des updates sur plusieurs tables).

    J'ai pensé à un select préliminaire avec le même where et mêmes tables ... mais je ne trouve ça pas top.

    Merci par avance

  2. #2
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    c'est normal que j'a rien compris ?
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  3. #3
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    Citation Envoyé par lionheart33806
    Bonjour,

    tout est dit dans le titre :

    Comment connaitre le nombre de lignes affectées par un update à l'avance ?
    C'est-à-dire, sans faire le valider (sans commit).

    Pour mon appli, je veux être sûr qu'il est n'y ait pas plus d'une ligne à jour (surtout pour des updates sur plusieurs tables).

    J'ai pensé à un select préliminaire avec le même where et mêmes tables ... mais je ne trouve ça pas top.
    Si tu es en mysql, je ne pense pas que tu puisses, en oracle par contre oui.
    Ouais, je pense que le select serait utilisé avant de faire ton update.
    Tuxboard Blog d'actu Buzz...
    Video de sport

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Joe Le Mort
    Si tu es en mysql, je ne pense pas que tu puisses, en oracle par contre oui.
    Ouais, je pense que le select serait utilisé avant de faire ton update.
    Tu ferais comment exactement avec Oracle ?
    Et pour MySql ?

  5. #5
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Je ne sais pas si j'ai compris ce que tu voulais faire mais, tu as mysql_num_rows qui te permet de savoir combien de ligne t'a requete t'a renvoyée...ici un update...
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par SnakemaN
    Je ne sais pas si j'ai compris ce que tu voulais faire mais, tu as mysql_num_rows qui te permet de savoir combien de ligne t'a requete t'a renvoyée...ici un update...
    Oui mais là le problème c'est que c'est avant la requête et pas après...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par JWhite
    Oui mais là le problème c'est que c'est avant la requête et pas après...
    Exactement, le but est connaitre le nombre de ligne pour savoir si "on" va vraiment faire le update ou pas.

    - Je construis le update
    - Je teste magiquement le nombre de lignes qu'il va modifier
    - Si nombre de lignes égal 1, faire le update

  8. #8
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par lionheart33806
    ....
    Comment connaitre le nombre de lignes affectées par un update à l'avance ?
    C'est-à-dire, sans faire le valider (sans commit).
    .....
    Ahh en fait tu fais un update de toute table mais tu veux savoir combien d'enregistrement on été modifié ?

    Mais je ne sais pas exactement comment marche un update, est-ce qu'il met a jour tout les champs meme si la nouvelle valeur et égale a l'ancienne, dans ce cas le mysql_num_row te renvera toutes tes lignes, OU BIEN est-ce que il y un test "automatique" pour voir si la nouvelle valeur et égale a l'ancienne si c'est le cas il passe au suivant, dans ce cas le mysql_num_rows serait de mise...
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  9. #9
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Arrf grilled
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  10. #10
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par lionheart33806
    Exactement, le but est connaitre le nombre de ligne pour savoir si "on" va vraiment faire le update ou pas.

    - Je construis le update
    - Je teste magiquement le nombre de lignes qu'il va modifier
    - Si nombre de lignes égal 1, faire le update
    Si c'est un MYSQL récent il est possible de faire cela en requetes imbriquées...donc rapide a l'execution

    Je crois qu'on peu y integrer un requete pour faire une condition (ici un where peut etre)

    ps : Si c'est UNe ligne de concernée ? tu sais laquelle ? premiere, ....?
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  11. #11
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Dans la version 3.23 de MySQL, vous pouvez utilisez le code LIMIT # pour vous assurer que seul un nombre d'enregistrements bien précis est changé.

    Avant MySQL 4.0.13, LIMIT est une restrictions sur le nombre de lignes affectées. Cette clause stoppe dès que row_count ont été trouvées par la clause WHERE.

    Depuis la version 4.0.13, LIMIT est une restriction sur le nombre de lignes trouvées. La commande s'arrête une fois que row_count lignes ont été trouvées par la clause WHERE, qu'elles ait été changées ou pas.
    vu ici http://dev.mysql.com/doc/refman/5.0/fr/update.html
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  12. #12
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    je crois qu'il ne veut pas limiter à 1 ligne, mais qu'il veut faire cet update que si il y a une ligne à updater. C'est ça?

    Donc si tu as + d'une ligne, tu fais pas l'update?
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par wamania
    je crois qu'il ne veut pas limiter à 1 ligne, mais qu'il veut faire cet update que si il y a une ligne à updater. C'est ça?

    Donc si tu as + d'une ligne, tu fais pas l'update?

    Tout à fait

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut,

    juste pour tordre cette idée erronée, les transaction sont possible sous mysql, et pour des versions released, tout comme la gestion de l'intégrité de données (clés étrangère). A condition de typer ses tables INNODB.
    le gel de l'autocommit pour une connexion se fait comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set autocommit = 0
    ou alors tout simplement, pour une transaction ponctuelle, encapsuler le groupe de requetes que l'ont veux grouper en transaction par les instruction BEGIN et COMMIT/ROLLBACK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mysql_query('begin');
    mysql_query($requete);
    $aff = mysql_affected_rows():
    mysql_query('rollback');
    realisable déjà à coup sur sous mysql 4.1.10 (avant jene sais pas).
    il n'y a pas de sotte existence

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par gisele
    Salut,

    ...
    le gel de l'autocommit pour une connexion se fait comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set autocommit = 0
    ou alors tout simplement, pour une transaction ponctuelle, encapsuler le groupe de requetes que l'ont veux grouper en transaction par les instruction BEGIN et COMMIT/ROLLBACK
    ...
    Ca me plait bien. A ton avis, ce principe peut être transposé sur Oracle ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Ca fait longtemps que je n'ai pas fait joujou avec mon Oracle 9i donc renseigne toi sur les syntaxes mais ca peut a fortiori etre transposé sous Oracle.

    Ca me rappelle des bons souvenirs ,je me souviens en projet libre j'avais créé une sorte de phpmyadmin (en simplifié) muli SGBD, Oracle 8* et 9* SQL Server 2000, access (le plus chiant sic) et Mysql en version client lourd avec VB et ADO (beurk) et en 3 tiers (php)grace a la couche ADODB je crois que j'avais mis des fonctionnalités de transactions.

    Une chose est sure, tu peux activer désactiver l'autocommit, et d'ailleurs Oracle a un sytème de gestion bien plus poussé avec des sortes de points de restauration intermédiaires (voir SAVEPOINT) que tu peux discéminer au milieu de ton flot de requetes et tout et tout.
    il n'y a pas de sotte existence

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/01/2015, 18h26
  2. Réponses: 4
    Dernier message: 13/11/2006, 18h05
  3. [Oracle] Nombre de ligne affecté par un update
    Par vimanas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/09/2006, 16h24
  4. [C#] Comment connaître le nombre de lignes affectées par un Select ?
    Par diaboloche dans le forum Accès aux données
    Réponses: 6
    Dernier message: 21/09/2006, 13h56
  5. [9i] Nombre de lignes affectées par un update
    Par yac dans le forum Oracle
    Réponses: 5
    Dernier message: 13/01/2006, 15h59

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