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 :

acces concurrents mysql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Par défaut acces concurrents mysql
    Bonjour,

    je realise actuellement un calendrier.
    les plages de rdv ne doievent pas se supperposé.
    pour creer un rdv a 14h00, je liste les rdv du jour et je regarde si il y a un rdv deja prevu a cette heure si il n y en a pas j inserre mon rdv dans ma table rdv.
    un probleme peut arriver si un autre utilisateur du calendrier insere un rdv pendant que je liste les rdv, une superposition peut avoir lieu.

    pour eviter ce probleme, j'ai pensé a utiliser une commande lock dans mon php apres la onnexion et un unlock avant la deconnexion.

    j ai fait un test:je lance une commande lock avec un php et avec un autre php je lance un select .
    resultat je peux listé ma base

    je debute en php et en mysql donc j'ai vraiment besoin d aide .
    peut etre je ne prend pas le bon chemiin...

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Par défaut
    je viens de penser a une autre piste.
    les fichier php s authentifie aupres de la base a l aide d un compte mysql puis effectue les requettes puis enfin ferme la connexion.
    plutot que d utiliser des locks, je pense que je peux limiter le compte mysql a une connexion a la fois.
    je ne sais pas si cette solution est viable car je ne sais pas si plusieur personne qui lance le php a ce moment seront reelement bloqué et aussi il ne faut pas qu il soit rejeté et que le php ne soit pas executé
    si quelqu un qui s y connait bien en php mysql peut me donner quelque indications....

  3. #3
    Membre confirmé
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut Côté mysql
    Bonjour,

    J'opterai pour une contrainte d'intégrité du côté mysql au niveau de la table contenant les rendez-vous.

    Deux choix sont possibles :
    - définir la clef primaire de la table sur les champs "date du rendez-vous" et "heure rendez-vous"
    - ou définir une contrainte de type UNIQUE sur les champs "date du rendez-vous" et "heure rendez-vous" (dans ce cas un autre champ contient la clef primaire)

    Dans les 2 cas une exception sql sera généré par le système si un enregistrement correspondant au jour et à l'heure du rendez-vous existe (ce qui permet au passage de supprimer le test pour savoir si le rendez-vous existe).

    Après il faut récupérer l'erreur retourner par mysql et afficher un message d'erreur explicite au second utilisateur (par ex: 'plage horaire indisponible').

    Bonne continuation

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 001
    Billets dans le blog
    6
    Par défaut
    Une contrainte d'unicité est insuffisante. En effet voici un exemple dans lequel il y a superposition de périodes et donc chevauchement de RV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE T_RDV
    (RDV_ID    INT PRIMARY KEY,
     RDV_DEBUT TIMESTAMP,
     RDV_FIN   TIMESTAMP,
     CONSTRAINT UK_RDV_PLAGE UNIQUE (RDV_DEBUT, RDV_FIN));
     
    INSERT INTO T_RDV VALUES ('2001-01-01 08:00:00',  '2001-01-01 09:00:00');
    INSERT INTO T_RDV VALUES ('2001-01-01 08:30:00',  '2001-01-01 09:30:00');
    Le seul moyen est de faire une contrainte CHECK qui vérifies qu'il n'existe pas de RD commençant ou finissant dans la plage DEBUT FIN du RDV que l'on veut insérer.
    Cela suppose de vérifier la contrainte sur un ensemble de valeurs et non par rapport aux données de la ligne, ce que MySQL qui est un ersatz de SGBDR n'est pas capable de faire !!!!
    A lire : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

    Il n'existe aucune solution viable pour résoudre ce problème dans MySQL, sauf à interdire tout accès même en lecture à la table le temps d'insérer un RDV via une transaction.

    En effet la contrainte à poser est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE T_RDV
       CHECK NOT EXISTS(SELECT *
                        FROM   T_RDV AS T
                        WHERE  T.RDV_FIN   > RDV_DEBUT AND T.RDV_FIN <= RDV_FIN
                          OR   T.RDV_DEBUT > RDV_DEBUT AND T.RDV_FIN <= RDV_FIN)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Empêcher les accès concurrents à un enregistrement MySQL
    Par bigsister dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 02/09/2009, 17h04
  2. PHP & MySQL : accès concurrent
    Par gloubi dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/07/2009, 14h30
  3. mysql acces concurrents
    Par horkets dans le forum Accès aux données
    Réponses: 4
    Dernier message: 03/11/2008, 10h49
  4. Mysql acces concurrents
    Par horkets dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 31/10/2008, 09h56
  5. jsp mysql accès concurrents aux données
    Par elpeygey dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 26/04/2007, 14h03

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