Lock à l'insert en mysql
7 messages
• Page 1 sur 1
-

Blini - WRInaute impliqué

- Messages: 506
- Inscription: 29 Nov 2004
Lock à l'insert en mysql
Bonjour,
Quelle méthode préférez-vous pour locker une table au moment d'un insert en mysql ? Je précise le contexte: je veux insérer un nouveau record avec un nouvel ID = max(ID) + 1, le champ ID est unique et n'est PAS en auto-increment.
J'ai pour l'instant utilisé la méthode "select lock('chaine', timeout)", que je déclenche avant le selextmax(id) et que je release après l'insert, et je voudrais savoir ce que ça vaut. Et que vaut un vrai lock de la table en écriture par rapport à ce système de lock "par chaine" ?
Blini
Quelle méthode préférez-vous pour locker une table au moment d'un insert en mysql ? Je précise le contexte: je veux insérer un nouveau record avec un nouvel ID = max(ID) + 1, le champ ID est unique et n'est PAS en auto-increment.
J'ai pour l'instant utilisé la méthode "select lock('chaine', timeout)", que je déclenche avant le selextmax(id) et que je release après l'insert, et je voudrais savoir ce que ça vaut. Et que vaut un vrai lock de la table en écriture par rapport à ce système de lock "par chaine" ?
Blini
-

Blini - WRInaute impliqué

- Messages: 506
- Inscription: 29 Nov 2004
Euh, oui, mais quand tu fais:
1- id = select max(id)
2- insert into table values(id, ...)
Entre le point 1 et le point 2, un autre thread a très bien pu choper le même max(id), et là, accès concurrentiel ou pas, c'est à toi de locker manuellement pour t'assurer de pas te retrouver avec deux fois le même id...
1- id = select max(id)
2- insert into table values(id, ...)
Entre le point 1 et le point 2, un autre thread a très bien pu choper le même max(id), et là, accès concurrentiel ou pas, c'est à toi de locker manuellement pour t'assurer de pas te retrouver avec deux fois le même id...
-

ortolojf - WRInaute passionné

- Messages: 1673
- Inscription: 14 Aoû 2002
Bonjour
Dans le cas ou le critère 'id' n'a pas de valeurs identiques multiples sur ta base, tu peux déclarer un unique index sur le champ id, avec la clause 'add unique index' de mysql.
Voir l'aide 'info mysql' sous Linux ou l'aide sous Windows pour la syntaxe exacte.
Le fait que l'index soit unique fera que, si la valeur de id existe déjà ( a été insérée par quelqu'un dautre depuis qu'elle a été calculée ), à ce moment-là il y a une erreur MySQL au moment du mysql_query qui fait l'insert.
D'après la valeur de mysql_error(), tu peux gérer les cas de doublons intempestifs.
Bien à toi.
Jean Francois Ortolo
Dans le cas ou le critère 'id' n'a pas de valeurs identiques multiples sur ta base, tu peux déclarer un unique index sur le champ id, avec la clause 'add unique index' de mysql.
Voir l'aide 'info mysql' sous Linux ou l'aide sous Windows pour la syntaxe exacte.
Le fait que l'index soit unique fera que, si la valeur de id existe déjà ( a été insérée par quelqu'un dautre depuis qu'elle a été calculée ), à ce moment-là il y a une erreur MySQL au moment du mysql_query qui fait l'insert.
D'après la valeur de mysql_error(), tu peux gérer les cas de doublons intempestifs.
Bien à toi.
Jean Francois Ortolo
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- INSERT ou UPDATE : Mysql
- [MySQL] INSERT / UPDATE conditionnel
- [mysql+php] Insert....select et modifications au passage
- Afficher les 10 derniere insert d'une table Mysql avec php ?
- Status: REGISTRAR-LOCK
- méthodes OPTIONS, HEAD, LOCK
- PHP / SQL et la commande LOCK TABLES
- REGISTRAR LOCK: après 1 mois, pertes chez les moteurs ?
- le requette insert into
- insert et apostrophe
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- Le WRInaute du moment - 24-10-2006
- Les différents systèmes de mise en cache des données - 16-08-2010
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


