[Mysql] Parsing d'une clé + On Duplicate Key

  • Auteur de la discussion Auteur de la discussion mr_go
  • Date de début Date de début
WRInaute passionné
Bonjour,

je souhaite possèder un type de clé de cette sorte 2006000001 dans une table.

Afin d'insérer un nouvel enregistrement, je récupère la dernière valeur et je l'incrémente via un parsing PHP.

Je souhaite me préserver d'une éventuelle erreur de clé dupliquée pouvant subvenir si un utilisateur a l'idée d'insérer un nouvel enregistrement au moment de la récupération de la dernière clé.

A moins qu'il existe une fonction d'accès exclusif temporaire en PHP (autre que les fonctions sem), je souhaite donc utiliser la clause ON DUPLICATE KEY UPDATE, qui me paraît être une alternative satisfaisante, car gérée directement via la base de données..
Code:
$derniere_cle = $db->exec("SELECT cle FROM matable ORDER BY cle DESC LIMIT 1");

$cle = incemente($derniere_cle);

$db->exec("INSERT INTO matable ('cle','champs1','champs2') VALUES('$cle','toto','tata') ON DUPLICATE KEY UPDATE cle = ????? ");
Si quelqu'un voit comment implémenter les ????... cela pourrait fortement m'être utile.

Merci à vous ;)
 
WRInaute occasionnel
Avec les dernieres versions de mysql, il existe les triggers si je ne m'abuse.

L'ideal serait de faire un trigger sur insertion. Lors du declenchement du trigger tu appeles une procedure stockee
qui fait la recuperation de la derniere cle, qui l'incremente, et qui effectue reelement l'insert.

Ainsi, c'est la base de données qui gere la valuation de la cle au moment de l'insertion.
 
WRInaute passionné
Ta clé c'est genre 2006 suivit d'un numéro d'enregistrement? (dans l'exemple 000001)

Pourquoi ne pas faire une clé sur deux champs annee, ID?
 
WRInaute passionné
qui fait la recuperation de la derniere cle, qui l'incremente, et qui effectue reelement l'insert

Justement, c'est ce code que je cherche ^^.

Pourquoi ne pas faire une clé sur deux champs annee, ID?

J'y ai pensé, mais je préférais garder uniquement un seul champs pour des raisons de logique.
 
Discussions similaires
Haut