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 :

Fonction : LOCK TABLE


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut [RESOLU] Fonction : LOCK TABLE
    Bonjour à tous, je suis débutant en SQL, j'en ai fait un peu en cours et je me heurte à un problème que je n'arrive pas à résoudre, aussi ca serait simpa de bien vouloir me faire profiter de votre savoir.

    Je suis en train d'installer un script (XNova) de jeu sur un ftp free. Le problème vient du fait que ce script utilise pour la fonction LOCK TABLE lors de l'UPDATE de certaines tables et que free n'accepte pas la fonction LOCK TABLE.

    Voici un exemple de code qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    doquery("LOCK TABLE {{table}} WRITE", 'planets');
    doquery ($QryUpdatePlanet, "planets");
    doquery("UNLOCK TABLES", '');
    J'aimerai remplacer la fonction LOCK TABLE par une autre fonction qui aurait le même effet, pour pouvoir utiliser le script sur chez mon hébergeur free

    Est-ce possible ? Et si oui comment dois-je modifier la fonction ?

    J'utilise MySQL 5.0 avec phpMyAdmin 2.11.3 si je ne me trompe pas

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut
    Bonsoir

    Si Free offre le moteur innodb vous pourriez alors faire un SELECT...FOR UPDATE qui verrouillent les lignes jusqu'à l'UPDATE suivant.

    Sinon vous pourriez essayer sans le lock TABLE, sans garantie... !

    Ou encore vous pourriez monter un système de pseudo Lock (gérer vous même les locks dans l'application via une table dédiée)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    Pour le moment c'est ce que j'ai fait, j'ai commenté la première et dernière ligne qui posent problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //doquery("LOCK TABLE {{table}} WRITE", 'planets');
    doquery ($QryUpdatePlanet, "planets");
    //doquery("UNLOCK TABLES", '');
    Et ça fonctionne comme ça mais j'imagine que si elles sont là c'est pour éviter les doublons ou ce genre de problème

    Par contre je ne sais pas comment remplacer LOCK TABLE dans mon code par SELECT... FOR UPDATE Faut-il faire comme suit ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    doquery("SELECT {{table}} WRITE", 'planets');
    doquery ($QryUpdatePlanet, "planets");
    ou comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    doquery("SELECT {{table}} FOR UPDATE OF 'planets'");
    doquery ($QryUpdatePlanet, "planets");
    ou autrement ...

    Merci de m'aider

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut
    Bonjour

    Après vérification, Free n'offre pas le moteur innoDB, oubliez ma réponse concernant SELECT FOR UPDATE.

    Franchement le plus simple serait de prendre un hébergement mutualisé entrée de gamme offrant le LOCK TABLE. Il faudra vérifier auprès du fournisseur ce point spécifique car certains hébergeurs le bloque.

    Exemple OVH l'offrait en MySql 4, le bloquait en MySql 5 puis l'a bloqué sur les nouvelles bases MySql 4...

    Le coût d'un tel hébergement est souvent ridicule (quelques euros par an) avec un service bien meilleur que celui de free pour les bases de données.

    Dernière piste, si votre script peut tourner sur PostGreSql alors il y a possibilité d'activer chez Free une telle base qui offre les verrous ligne par SELECT FOR UPDATE. Mais bon cela vous obligerait à adapter le script.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    Merci pour ton aide, je viens de transférer mon site sur un serveur mutualisé qui gère la fonction LOCK TABLE Encore merci beaucoup

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Par défaut
    Salut (deux ans après) ,
    Tu pouvais en effet utiliser une table pour bloquer les autres modifications durant ton update, ou sinon, un fichier que tu créer avant tes requêtes et supprime à la fin.

    avant tes requêtes avec ce système il suffisait de faire :

    while(is_file('fichier.lock')) sleep(1);

    qui aurait pour effet d'attendre jusqu'à ce que un autre script lancé se termine et supprime le fichier.lock !

    Peace.

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

Discussions similaires

  1. Lock table
    Par amelie6 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/09/2011, 16h29
  2. LOCK TABLES et TRUNCATE TABLE
    Par killy-kun dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/08/2005, 15h52
  3. [SQL-Interbase] Fonction SHOW TABLES
    Par polocfa41 dans le forum InterBase
    Réponses: 4
    Dernier message: 26/04/2005, 11h33
  4. Fonctions et tables temporaires ?!
    Par devdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/12/2004, 11h46
  5. Réponses: 8
    Dernier message: 13/08/2004, 12h32

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