questions php/mysql :p - PHP - Programmation
Marsh Posté le 31-03-2003 à 11:13:54
il me semble que la base n'est lue que lors de l'éxécution de ta requête, ensuite les lignes correspondantes sont placées en mémoire
concernant les insertion concurrentes, mysql utilise un système de lock, l'insertion au même moment est impossible (les requêtes sont traitées l'une après l'autre)
Marsh Posté le 31-03-2003 à 11:14:02
art_dupond a écrit : youp,
|
non
Marsh Posté le 31-03-2003 à 13:41:54
oki pour le 1
par contre ce pour le deux,...
bon je prends un exemple :
si une action modifie deux trucs dans la base et que le deuxième truc à modifier dépend du premier truc
si quelqu'un fait une 'action' => modifier le premier truc
si quelqu'un d'autre fait une action à ce moment là, il va peut-etre re-modifier le truc avant que le deuxième truc (du permier gars) ne soit modifié, ce qui va causer problème...
non ?
Marsh Posté le 31-03-2003 à 13:57:49
avec une simple query select, tu n'as aucun moyen de savoir qu'un autre ne va pas modifier tes données dans l'intervalle. Il faut que tu gardes une connexion active sur ta DB et réserver (locker) le(s) row(s) que tu as l'intention de modifier, jusqu'à modification ou annulation. Si tu perds ta connexion, tu perds aussi le lock. C'est la philosophie du truc.
Marsh Posté le 31-03-2003 à 14:16:04
il faut que je fasse une connection persistente c'est ca ?
comment on reserve les rows ?
Marsh Posté le 31-03-2003 à 14:32:46
art_dupond a écrit : youp,
|
Non. Tu peux d'ailleurs fermer ta connexion après ta ligne 1.
art_dupond a écrit : il faut que je fasse une connection persistente c'est ca ? |
Pas besoin d'une connexion persistante, ca n'a rien à voir. Pour bloquer ta table le temps d'un traitement tu dois utiliser, si tu n'as pas accès au handle InnoDB :
LOCK TABLES tatable / traitement / UNLOCK TABLES
Marsh Posté le 31-03-2003 à 14:42:07
mmmh ici c'est une row qu'on veut locker, pas une table, ce que MySQL ne permet apparemment pas (je viens de fouiller la doc à ce sujet). D'autre part, la doc spécifie qu'un lock est perdu dès que la connexion est coupée.
Marsh Posté le 31-03-2003 à 14:45:09
drasche a écrit : mmmh ici c'est une row qu'on veut locker, pas une table, ce que MySQL ne permet apparemment pas (je viens de fouiller la doc à ce sujet). D'autre part, la doc spécifie qu'un lock est perdu dès que la connexion est coupée. |
Si, le row locking est géré, mais sous InnoDB uniquement, MyISAM se limite au table locking.
Marsh Posté le 31-03-2003 à 10:06:05
youp,
je voudrais avoirs quelques confirmations
quand on fait,
1. $brol = mysql_query("SELECT....);
2. $result = mysql_fetch_array($brol);
à la ligne 2. la base est-elle interrogée ?
deuxième chose, je voudrais savoir ce qui se passe quand deux personnes ajoutent en meme temps quelque chose dans la base.
ca peut faire des problèmes non ?
j'emploie mysql 3.23.43 et je ne peux pas employer de table Innodb (c'est ca ?). Comment faire pour éviter les problèmes ?
mercitoo le mondeuh
ps: sorry pour le titre pas explicite, je savais pas quoi mettre
Message édité par art_dupond le 31-03-2003 à 10:17:28