Comment gérer les accès concurrents dans une base MySQL? - SQL/NoSQL - Programmation
Marsh Posté le 22-05-2003 à 16:33:53
Tet2neu a écrit : Oui si j'ai une table individu avec un champ num_individu en auto increment ; si je récupère le max de num_individu et qu'après j'insère un nouvel individu, si un autre a été inséré entre temps, mon max n'est plus valide... |
En tte logique, si tu as choisi une clé auto incrémentée, il faut surtout pas s'amuser à chercher à l'imposer (de tte manière ça rique de gueuler)
Il existe une fonction en php qui te retourne la dernière valeur auto incrémentée je crois
attends je cherche
Marsh Posté le 22-05-2003 à 16:37:34
Johnix a écrit : |
Mais entre le moment où cette fonction renvoie la dernière valeur et le moment où j'insère mon individu dans la base, comment savoir si max+1 n'est pas occupé par quelqu'un d'autre qui ferait la meme requete que moi pratiquement en meme temps...
Y a pas un moyen de bloquer les insertions dans la table ?
Marsh Posté le 22-05-2003 à 16:49:56
bah tu ne specifies pas de valeur pour ton champ en auto increment
et tu peux recuperer le nouvel id créé par mysql_insert_id()
Marsh Posté le 22-05-2003 à 18:46:34
Tet2neu a écrit : |
en gros si tu ne fais rien de particulier, ça marchera sauf si 2 ajouts lors de la même seconde (très rare)
Si tu veux absolument éviter ça, utilise les identifiants de sessions
Marsh Posté le 22-05-2003 à 23:15:04
Même pas, c'est géré au niveau de la connexion.
Le seul moyen de récupérer un identifiant qui ne soit pas celui de la ligne que l'on vient d'insérer, c'est d'avoir fait une autre insertion avec la même connexion à la base, c'est à dire venant du même programme/script
Marsh Posté le 23-05-2003 à 08:53:40
yack a écrit : bah tu ne specifies pas de valeur pour ton champ en auto increment |
je plussoie
un appel à mysql_insert_id() juste après ton insertion et tu auras toujours l'id de l'enregistrement que tu viens d'insérer.
Marsh Posté le 22-05-2003 à 16:31:39
Oui si j'ai une table individu avec un champ num_individu en auto increment ; si je récupère le max de num_individu et qu'après j'insère un nouvel individu, si un autre a été inséré entre temps, mon max n'est plus valide...