comment tester si une fiche est vérouillée avec mysql ?
5 réponses
patrice
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur
modifié d'autres fiches.
par exemple, un entete de facture, et des lignes de factures
si quelqu'un d'autre veut modifier une facture en cours de modif, je test si
la fiche est lockée:
- si pas lockée, j'essaie de locker et je continue
- si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air
simple, je sens que je vais devoir exécuter à la main un select for update.
mais je vois pas du tout comment tester si une fiche est lockée (un simple
lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage
car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Roumegou Eric
patrice a formulé ce vendredi :
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur modifié d'autres fiches. par exemple, un entete de facture, et des lignes de factures si quelqu'un d'autre veut modifier une facture en cours de modif, je test si la fiche est lockée: - si pas lockée, j'essaie de locker et je continue - si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air simple, je sens que je vais devoir exécuter à la main un select for update. mais je vois pas du tout comment tester si une fiche est lockée (un simple lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
seul Innodb peut gérer les blocages dans mysql et comme tu le dis tu as le pb du time out assez long.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)
patrice a formulé ce vendredi :
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur
modifié d'autres fiches.
par exemple, un entete de facture, et des lignes de factures
si quelqu'un d'autre veut modifier une facture en cours de modif, je test si
la fiche est lockée:
- si pas lockée, j'essaie de locker et je continue
- si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air
simple, je sens que je vais devoir exécuter à la main un select for update.
mais je vois pas du tout comment tester si une fiche est lockée (un simple
lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage
car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
seul Innodb peut gérer les blocages dans mysql
et comme tu le dis tu as le pb du time out assez long.
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur modifié d'autres fiches. par exemple, un entete de facture, et des lignes de factures si quelqu'un d'autre veut modifier une facture en cours de modif, je test si la fiche est lockée: - si pas lockée, j'essaie de locker et je continue - si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air simple, je sens que je vais devoir exécuter à la main un select for update. mais je vois pas du tout comment tester si une fiche est lockée (un simple lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
seul Innodb peut gérer les blocages dans mysql et comme tu le dis tu as le pb du time out assez long.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)
Jacques Bratières
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric a écrit:
patrice a formulé ce vendredi :
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur modifié d'autres fiches. par exemple, un entete de facture, et des lignes de factures si quelqu'un d'autre veut modifier une facture en cours de modif, je test si la fiche est lockée: - si pas lockée, j'essaie de locker et je continue - si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air simple, je sens que je vais devoir exécuter à la main un select for update. mais je vois pas du tout comment tester si une fiche est lockée (un simple lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
seul Innodb peut gérer les blocages dans mysql et comme tu le dis tu as le pb du time out assez long.
Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric <Utilisezlelien@fin.msg>
a écrit:
patrice a formulé ce vendredi :
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser
l'utilisateur
modifié d'autres fiches.
par exemple, un entete de facture, et des lignes de factures
si quelqu'un d'autre veut modifier une facture en cours de modif, je
test si
la fiche est lockée:
- si pas lockée, j'essaie de locker et je continue
- si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas
l'air
simple, je sens que je vais devoir exécuter à la main un select for
update.
mais je vois pas du tout comment tester si une fiche est lockée (un
simple
lock provoque l'attente d'un timeout assez long, ce qui est un peu
dommage
car c'est pas la peine d'essayer si on sait que la fiche est déjà
lockée)
seul Innodb peut gérer les blocages dans mysql
et comme tu le dis tu as le pb du time out assez long.
Réponse à côté (mais peut être utile?): sous oracle select ... for update
nowait
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric a écrit:
patrice a formulé ce vendredi :
bonjour
Il m'arrive souvent de vérouiller une fiche, avant de laisser l'utilisateur modifié d'autres fiches. par exemple, un entete de facture, et des lignes de factures si quelqu'un d'autre veut modifier une facture en cours de modif, je test si la fiche est lockée: - si pas lockée, j'essaie de locker et je continue - si lockée, zoli message: cette fiche est en cours d'utilisation
par contre en mysql ca marche comment ca ? déjà pour locker ca a pas l'air simple, je sens que je vais devoir exécuter à la main un select for update. mais je vois pas du tout comment tester si une fiche est lockée (un simple lock provoque l'attente d'un timeout assez long, ce qui est un peu dommage car c'est pas la peine d'essayer si on sait que la fiche est déjà lockée)
seul Innodb peut gérer les blocages dans mysql et comme tu le dis tu as le pb du time out assez long.
Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
patrice
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
A ce propos, je viens de découvrir le group by de mysql se moque des colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left join table2 on table1.idtable1=table2.idtable1 group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" a écrit dans le message de news:
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric > Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on
ne pourra jamais porter son appli sans faire des spécificités selon la
database;
A ce propos, je viens de découvrir le group by de mysql se moque des
colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left
join table2 on table1.idtable1=table2.idtable1
group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" <j.brat@invalid.fr> a écrit dans le message de
news:op.tubv8p0x1gcpmt@jbxp...
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric <Utilisezlelien@fin.msg>
>
Réponse à côté (mais peut être utile?): sous oracle select ... for update
nowait
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
A ce propos, je viens de découvrir le group by de mysql se moque des colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left join table2 on table1.idtable1=table2.idtable1 group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" a écrit dans le message de news:
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric > Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
Firetox
Bonjour,
pour le timeout c'est parametrable. je met pour ma part 2 secondes
ensuite il existe d'autre solution : les semaphores sous mySQL c'est set lock et release lock on donne un nom (je met la primary key en nom comme ca pas de probleme
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
c'est souvent le language de programmation qui est en cause sous c++ on a des classe qui font ca sous windev aussi mais cela s'appelle SQLManagerX. en fait dans les 2 cas les bloque sont fait suaivant la base mais pour le developpeur c'est comme sous windev un HlitBloque evoie des commandes differentes suivant les SGBD.
il y a 15 ans avec les langugage de 3 eme generation on devait le faire a la mimine. et suivant le SGBD il fallait changer le code. les L4G ont ameiorés cela, mais comme tout L4G ils previliegient toujours un SGBD. ou alors on passe dans ces codes qui sont fait pour ca ADO par exemple en c++ et SQLManagerX pour windev. les objets ADO font les requetes qui vont bien (mais la aussi SQLServer est avantagé : devinez pourqoui)
bref pour mySQL le lock doit etre dans une transaction et seul innodb le permet sinon passez par des semaphores.
Bon dev @+
Firetox
"patrice" a écrit dans le message de news: 467bea7a$0$5101$
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
A ce propos, je viens de découvrir le group by de mysql se moque des colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left join table2 on table1.idtable1=table2.idtable1 group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" a écrit dans le message de news:
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric
> Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
Bonjour,
pour le timeout c'est parametrable.
je met pour ma part 2 secondes
ensuite il existe d'autre solution : les semaphores
sous mySQL c'est set lock et release lock on donne un nom (je met la primary
key en nom comme ca pas de probleme
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que
l'on
ne pourra jamais porter son appli sans faire des spécificités selon la
database;
c'est souvent le language de programmation qui est en cause sous c++ on a
des classe qui font ca
sous windev aussi mais cela s'appelle SQLManagerX. en fait dans les 2 cas
les bloque sont fait suaivant la base mais pour le developpeur c'est comme
sous windev un HlitBloque evoie des commandes differentes suivant les SGBD.
il y a 15 ans avec les langugage de 3 eme generation on devait le faire a la
mimine. et suivant le SGBD il fallait changer le code. les L4G ont ameiorés
cela, mais comme tout L4G ils previliegient toujours un SGBD. ou alors on
passe dans ces codes qui sont fait pour ca ADO par exemple en c++ et
SQLManagerX pour windev. les objets ADO font les requetes qui vont bien
(mais la aussi SQLServer est avantagé : devinez pourqoui)
bref pour mySQL
le lock doit etre dans une transaction et seul innodb le permet sinon passez
par des semaphores.
Bon dev
@+
Firetox
"patrice" <patrice@idea.dnsalias.net> a écrit dans le message de news:
467bea7a$0$5101$ba4acef3@news.orange.fr...
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que
l'on
ne pourra jamais porter son appli sans faire des spécificités selon la
database;
A ce propos, je viens de découvrir le group by de mysql se moque des
colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left
join table2 on table1.idtable1=table2.idtable1
group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" <j.brat@invalid.fr> a écrit dans le message de
news:op.tubv8p0x1gcpmt@jbxp...
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric
<Utilisezlelien@fin.msg>
>
Réponse à côté (mais peut être utile?): sous oracle select ... for update
nowait
pour le timeout c'est parametrable. je met pour ma part 2 secondes
ensuite il existe d'autre solution : les semaphores sous mySQL c'est set lock et release lock on donne un nom (je met la primary key en nom comme ca pas de probleme
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
c'est souvent le language de programmation qui est en cause sous c++ on a des classe qui font ca sous windev aussi mais cela s'appelle SQLManagerX. en fait dans les 2 cas les bloque sont fait suaivant la base mais pour le developpeur c'est comme sous windev un HlitBloque evoie des commandes differentes suivant les SGBD.
il y a 15 ans avec les langugage de 3 eme generation on devait le faire a la mimine. et suivant le SGBD il fallait changer le code. les L4G ont ameiorés cela, mais comme tout L4G ils previliegient toujours un SGBD. ou alors on passe dans ces codes qui sont fait pour ca ADO par exemple en c++ et SQLManagerX pour windev. les objets ADO font les requetes qui vont bien (mais la aussi SQLServer est avantagé : devinez pourqoui)
bref pour mySQL le lock doit etre dans une transaction et seul innodb le permet sinon passez par des semaphores.
Bon dev @+
Firetox
"patrice" a écrit dans le message de news: 467bea7a$0$5101$
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
A ce propos, je viens de découvrir le group by de mysql se moque des colonnes du select.
on peut donc faire select table1.*,count(table2.idtable2) from table1 left join table2 on table1.idtable1=table2.idtable1 group by table1.idtable1
ce qui revient un peu au "premier" de access...
"Jacques Bratières" a écrit dans le message de news:
Le Fri, 22 Jun 2007 16:45:11 +0200, Roumegou Eric
> Réponse à côté (mais peut être utile?): sous oracle select ... for update nowait
-- J.Bratières
Emmanuel LECOESTER
"patrice" a écrit dans le message de news: 467bea7a$0$5101$
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
Oui si tu utilises les siouxeries de la dite base de données. Je n'ai jamais eu de problème d'adaptation du langage SQL. Les types diffèrent entre les bases mais beaucoup d'équivalence de fonctions sont disponibles (voir le lien favori de Eric R). En prenant comme principe de ne faire aucun calcul dans la requete (concatenation de chaine, opération conditionnée) tu as une quasi iso-fonctionnalité entre les différents SGBD.
"patrice" <patrice@idea.dnsalias.net> a écrit dans le message de news:
467bea7a$0$5101$ba4acef3@news.orange.fr...
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que
c'est un standard, mais des qu'on gratte en surface, on s'apercoit que
l'on
ne pourra jamais porter son appli sans faire des spécificités selon la
database;
Oui si tu utilises les siouxeries de la dite base de données. Je n'ai jamais
eu de problème d'adaptation du langage SQL. Les types diffèrent entre les
bases mais beaucoup d'équivalence de fonctions sont disponibles (voir le
lien favori de Eric R). En prenant comme principe de ne faire aucun calcul
dans la requete (concatenation de chaine, opération conditionnée) tu as une
quasi iso-fonctionnalité entre les différents SGBD.
"patrice" a écrit dans le message de news: 467bea7a$0$5101$
C'est ca qu'est un peu dommage avec sql. vu de loin on a l'impression que c'est un standard, mais des qu'on gratte en surface, on s'apercoit que l'on ne pourra jamais porter son appli sans faire des spécificités selon la database;
Oui si tu utilises les siouxeries de la dite base de données. Je n'ai jamais eu de problème d'adaptation du langage SQL. Les types diffèrent entre les bases mais beaucoup d'équivalence de fonctions sont disponibles (voir le lien favori de Eric R). En prenant comme principe de ne faire aucun calcul dans la requete (concatenation de chaine, opération conditionnée) tu as une quasi iso-fonctionnalité entre les différents SGBD.