PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 04-10-2009 21:17:14

youssef
Membre
Inscription : 21-09-2009
Messages : 13

un trigger MySQL

bonsoir à vous

j'essaye d'ajouter un trigger à une table ( mysql ) qui sera déclenche après chaque insertion, ce trigger devra vérifier pour le dernier enregistrement ajouter la valeur d'un champ, si ce dernier est 0 alors il va le modifier et y insérer la même valeur de la clef primaire qui est un champ auto_increment ( CATCODE )

ceci est mon trigger, mais j'arrive pas à l'ajouter suite  à un problème de syntaxe d'après le message d'erreur que je reçois

Merci pour votre aide

CREATE TRIGGER idmere_update AFTER UPDATE ON AJ_categorie
FOR EACH ROW
BEGIN
DECLARE idmere int;

select max(CATCODE) into @idmere
from AJ_categorie ;

update AJ_categorie set AJ__CATCODE=@idmere where CATCODE=@idmere;
END

Hors ligne

#2 04-10-2009 21:53:02

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : un trigger MySQL

Saluton,
Pourquoi faire compliqué et surtout n'importe quoi ?
LAST_INSERT_ID, tu connais ?

LAST_INSERT_ID(), LAST_INSERT_ID(expr)

Retourne le dernier identifiant automatiquement généré par une colonne AUTO_INCREMENT.

mysql> SELECT LAST_INSERT_ID();
        -> 195

Le dernier ID généré est conservé par le serveur pour chaque connexion. Un autre client ne la modifiera donc pas, même s'ils génèrent une autre valeur AUTO_INCREMENT de leur coté. Ce comportement permet de s'assurer que les actions des autres clients ne perturbe pas les actions du client en cours.

La valeur de LAST_INSERT_ID() ne sera pas modifiée non plus si vous modifiez directement la valeur d'une colonne AUTO_INCREMENT avec une valeur simple (c'est à dire, une valeur qui n'est ni NULL, ni 0).

Si vous insérez plusieurs lignes au même moment avec une requête INSERT, LAST_INSERT_ID() retourne la valeur de la première ligne insérée. La raison à cela est que cela rend possible la reproduction facilement la même requête INSERT sur d'autres serveurs.

Si vous utilisez une commande INSERT IGNORE et que la ligne est ignorée, le compteur AUTO_INCREMENT sera malgré tout incrémenté, et LAST_INSERT_ID() retournera une nouvelle valeur.

Si expr est donnée en argument à la fonction LAST_INSERT_ID(), alors la valeur de l'argument sera retourné par la fonction et sera enregistré comme étant la prochaine valeur retournée par LAST_INSERT_ID(). Cela peut être utilisé pour simuler des séquences :

    *

      Commencez par créer la table suivante :

      mysql> CREATE TABLE sequence (id INT NOT NULL);
      mysql> INSERT INTO sequence VALUES (0);

    *

      Utilisez cette table pour générer des séquences de nombre comme ceci :

      mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
      mysql> SELECT LAST_INSERT_ID();

      La commande UPDATE incrémente le compteur de séquence, et fait que le prochain appel à LAST_INSERT_ID() va retourner une valeur différente. La commande SELECT lit cette valeur. La fonction C mysql_insert_id() peut aussi être utilisée pour lire la valeur. See Section 24.2.3.33, « mysql_insert_id() ».

Vous pouvez générer des séquences sans appeler la fonction LAST_INSERT_ID(), mais l'utilité d'utiliser cette fonction cette fois si est que la valeur ID est gérée par le serveur comme étant la dernière valeur générée automatiquement. (sécurité multi-utilisateur). Vous pouvez retrouver la nouvelle ID tout comme vous pouvez lire n'importe quelle valeur AUTO_INCREMENT dans MySQL. Par exemple, la fonction LAST_INSERT_ID() (sans argument) devrait retourner la nouvelle ID. La fonction C de l'API mysql_insert_id() peut être également utilisée pour trouver cette valeur.

Notez que la fonction mysql_insert_id() est incrémentée uniquement après des requêtes INSERT et UPDATE, donc, vous ne pouvez pas utiliser la fonction C de l'API pour trouver la valeur de LAST_INSERT_ID(expr) après avoir exécuté d'autres types de requêtes, comme SELECT ou bien SET


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 07-10-2009 19:42:04

youssef
Membre
Inscription : 21-09-2009
Messages : 13

Re : un trigger MySQL

merci pour la réponse, 

j'ai jamais entendu la fonction LAST_INSERT_ID()   par conte j'avais déjà utilisé la fonction php : mysql_insert_id() qui  faut sûrement appel à la fonction mysql 

mais utilisé LAST_INSERT_ID() ? je dois toujours utiliser un trigger ça va juste m'éviter de faire

 select max(CATCODE) into @idmere
from AJ_categorie ;

vrai ?

Hors ligne

#4 08-10-2009 09:50:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : un trigger MySQL

youssef a écrit :

mais utilisé LAST_INSERT_ID() ? je dois toujours utiliser un trigger ça va juste m'éviter de faire

 select max(CATCODE) into @idmere
from AJ_categorie ;

vrai ?

D'après toi ?
Ça ne va pas juste t'éviter de faire, ça va surtout éviter d'attribuer une ID erronée.
N'oublie pas qu'en client-serveur on est en accès concurrentiel.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums