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

Firebird Discussion :

Verrouiller un enregistrement lors d'un select (suite)


Sujet :

Firebird

  1. #1
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut Verrouiller un enregistrement lors d'un select (suite)
    suite à cette discution , j'aime bien savoir si c'est possible, et aussi si c'est valable de véruiller un enregistrement, surtout ce topic le déconseil,
    votre opinion svp, merci

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    bien sûr que c'est possible

    mais explique ton cas et on te dira quoi et comment faire

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    bah simple question , simplement pour savoir si c'est possible, et les cas où en peut l'utlisé et où on ne doit pas le faire, merci
    prenons l'eample sité dans ce topique il a proposé cette solution à la place des vérrous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    T1 BEGIN TRANSACTION PLACE_AVION 1
     
    T3 UPDATE T_VOL
       SET    VOL_PLACES_LIBRES = VOL_PLACES_LIBRES - 5
       WHERE  VOL_ID = 2
    T4 INSERT INTO T_CLIENT_VOL VALUES (77, 2, 5)
    T5 if (SELECT VOL_PLACES_LIBRES
           FROM T_VOL WHERE VOL_ID = 2) < 0
    T6 then
           ROLLBACK TRANSACTION PLACE_AVION 1
    T7 else
           COMMIT TRANSACTION PLACE_AVION 1
    là en annule notre transaction si le nombre des places est négative, aprés que nous avons affirmé au réserveur qu'il y a des places!!!!

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    il faut que tu lises ça :
    http://firebird-fr.eu.org/doku.php?i...s:transactions
    mais en gros il n'y a quasiment jamais besoin de poser explicitement des verrous, il faut utiliser les transactions et de toutes façons tout dialogue avec les données d'une base se fait dans le contexte d'une transaction (même un simple select)

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    C'est vrai que commercialement, c'est pas le top...

    Mais il faut raisonner en accès concurrentiel...d'où parfois l'utilité d'un verrouillage.

    Le pb du verrouillage est qu'il doit être en place le minimum de temps possible, le topic cité doit bien le mentionner, afin de ne pas pénaliser les autres utilisateurs.

    C'est facile à dire, mais moins facile à faire selon le SGBD: ça dépend de la "maille" sur laquelle le verrou s'applique : la page, la ligne ?

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    ok, merci, je vais lire encore plus sur le sujet,

  7. #7
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    juste un petit exemple avec des transactions read committed
    (la table a une contrainte qui interdit d'avoir un nombre de place disponibles inférieure à zéro) et j'ai laissé les messages d'exceptions lévées par Firebird

    Après on peut jouer avec les différents types de transactions

    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
     
    La première transaction regarde la disponibilité readcommitted read
    [(8,)]
    La deuxième transaction regarde la disponibilité readcommitted read
    [(8,)]
    La première transaction regarde la disponibilité readcommitted write
    [(8,)]
    La deuxième transaction prend 5 places (pas encore committé) readcommitted write
    La première transaction prend 5 places et veux committer
    (-901, 'isc_dsql_execute: \n  lock conflict on no wait transaction\n  deadlock\n  update conflicts with concurrent update\n  concurrent transaction number is 89')
    rollback car échec
    La deuxième transaction veux commiter
    commit réussi
    La première transaction (en fait une troisième car la première est terminée par le rollback) réessaye de prendre 5 places et veux committer
    (-297, "isc_dsql_execute: \n  Operation violates CHECK constraint INTEG_5 on view or table T1\nSQL traceback (most recent call last):\n  At trigger 'CHECK_4'")
    rollback car échec

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

Discussions similaires

  1. Verrouiller d'un enregistrement lors de sa consultation
    Par natalii dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 23/05/2007, 14h56
  2. Verrouiller un enregistrement lors d'un select
    Par RamDevTeam dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/11/2005, 17h20
  3. Réponses: 6
    Dernier message: 08/06/2004, 14h51
  4. Correspondance de types lors d'un SELECT
    Par Alain Dionne dans le forum ASP
    Réponses: 5
    Dernier message: 18/05/2004, 20h54
  5. caractere blanc lors d'un select
    Par julio84 dans le forum ASP
    Réponses: 3
    Dernier message: 27/08/2003, 10h16

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