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 :

probleme de verroux et de innodb_lock_wait_timeout


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut probleme de verroux et de innodb_lock_wait_timeout
    Bonjour à tous,

    Je suis sous linux (mais pas root), en mysql 5.0.45, je suis seule à utiliser la base, et j'ai juste fait 2 tables;
    j'ai besoin qu'elles soient en innodb car table_2 a pour clé etrangère la clé primaire de Table_1.


    mais j'avais un probleme de innodb_lock_wait_timeout.

    Alors la premiere je l'ai faite en myisam, je l'ai remplie, je n'ai plus besoin d'y toucher et je l'ai passer en Innodb.

    Puis j'ai fait la seconde mais là ce sera un script qui la remplira ...

    Malheureusement le probleme que j'ai contourné pour la premiere table se repose pour la seconde!

    Le script peut faire les select, mais pas les INSERT INTO table_2 VALUES (..) à cause de je ne sais quels verrous et de cette variable "innodb_lock_wait_timeout" ...

    la cle etrangere je l'ai defini comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT fk_id_table_1 FOREIGN KEY (id_table_1) REFERENCES table_1(id_table_1)  ENGINE=INNODB

    Est-ce que quelqu'un pourrait m'aider pour ce probleme d'insertion s'il vous plait...
    Dans tout ce que j'ai pu lire sur le net, Je ne comprends rien à la façon de faire accepter les selects ... comments deverouiller les veroux qui me servent à rien?

    En fait pour la table_2 j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE table_2 ( 
    id_table_2 INT NOT NULL AUTO_INCREMENT, 
    nom VARCHAR(50) NOT NULL, 
    ..., 
    id_table_1 CHAR(10) NOT NULL, 
    CONSTRAINT pk_id_table_2 PRIMARY KEY (id_table_2), 
    INDEX index_id_table_1 (id_table_1),  
    CONSTRAINT fk_id_table_1 FOREIGN KEY (id_table_1) REFERENCES table_1(id_table_1) ) 
     
    DEFAULT CHARSET=UTF8 
    ENGINE=INNODB 
    COMMENT='blabla';
    et pour la table_1 j'ai fait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE table_1 ( 
    id_table_1 CHAR(10) NOT NULL,  
    ref_1 TINYINT(1) DEFAULT 0 NOT NULL, 
    ...
    ref10 TINYINT(1) DEFAULT 0 NOT NULL, 
     
    PRIMARY KEY (id_table_1) )
    DEFAULT CHARSET = UTF8 
    COMMENT = 'blabla';
    puis après remplissage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     alter table table_1 ENGINE = INNODB;
    mon script est en python :

    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
    #!/usr/bin/python
    # -*- coding:Utf-8 -*-
     
    import MySQLdb
     
    conx = MySQLdb.connect(db="madb",  user="moua")
    cursr = conx.cursor()
     
    req = "NULL, \'blabla\', \'blabla.txt\', 10, 1, 3, 4, 5,0,\'1000000000\');"
    # insert into table_2 values(NULL, 'blabla', 'blabla.txt', 10, 1, 3, 4, 5,0,'1000000000');
    requete_insert_table_2 = "insert into table_2 values (" + req + ");"
     
    cursr.execute(requete_insert_table_2)
    cursr.fetchall()
     
    print "fini"
    Merci d'avance si vous pouvez m'aider

  2. #2
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    En fait , j'oubliais de dire que si je fais les insertions à la main tout se passe bien.
    La table_1 se remplit normalement.
    Mais le script, lui, est bloqué... Aucune insertion ne se fait...
    Je voudrais savoir quels verrous l'empechent de m'inserrer mes donnees et comment les deverouiller...
    par ce que le but apres, c'est de faire boucler le script pour entrer les donnees automatiquement...

    Si je remplace la requette un select

    req ="select * from table_2"

    il me ramene l'enregistrement que j'ai fait à la main, donc ça ne vient pas du script, ça vient du verrou sur l'insert...

  3. #3
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Le probleme de lock wait timeout exeeded se pose quand il y a un probleme d'acces concurrent aux tables.

    Par exemple j'avais ce probleme car je consultais mes table (avec Toad) et apres je lançais des scripts. Le probleme c'est que les tables etaient en train d'etres lues donc cela faisait un acces concurrent. J'ai donc commité la session de toad et apres mon script fonctionnai.

    Donc je pense que ce probleme doit se poser pour toi.
    Tu peux essayer de faire un commit avant ta requete d'insert et voir si un simple insert fonctionne.


  4. #4
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Merci beaucoup Pop up pour ton aide!!

    Je ne sais pas faire ça

    j'ai lu qu'il y avait un autocommit par defaut...

    j'imagine qu'il faut mettre dans le script autocommit=0 ?

    et le COMMIT se met après la requete d'insertion dans le script?

    y a pas un rollback ou un update dans cette histoire aussi...?

    comment ça marche-t'i ?

  5. #5
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Si j'essaye de refaire du python, je testerai ça :

    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
     
    #!/usr/bin/python
    # -*- coding:Utf-8 -*-
     
    import MySQLdb
     
    conx = MySQLdb.connect(db="madb",  user="moua")
    cursr = conx.cursor()
     
    req = "commit;" 
    req1 = "insert into table_2 values(NULL, 'blabla', 'blabla.txt', 10, 1, 3, 4, 5,0,'1000000000');"
     
     
    cursr.execute(req)
    cursr.execute(req1)
    cursr.fetchall()
    cursr.close()
     
    conx.close() 
     
    print "fini"

  6. #6
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    ça y est !!!!

    Je le tiens !!!


    MERCI INFINIMENT POP UP !!!!

    Sans toua je n'y serais pas arrivée!!!

    le curseur.execute("commit;") , finalement va entre la requete insert celle de fetchall apparemment ...
    mais le tout c'est que ça marche!!

    MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI !

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

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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