Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
496 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trigger MySQL 5

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trigger MySQL 5

n°1711853
bvtk
Posté le 03-04-2008 à 00:35:15  profilanswer
 

Bsr
Je suis a mes début de mySQL et même de SQL. Et donc avec mes premier PB.
 
Soit 2 tables
Table CAT
id INT(10)
Name VARCHAR(25)
 
Table Link
id INT(11)
id_cat INT(11)
Title VARCHAR(45)
 
Une catégorie peut avoir plusieurs link mais pas l'inverse.
 
Je désir par trigger supprimer tous les links après supression d'une catégorie.
 
J'ai donc écris ce trigger:
CREATE trigger del_Cat AFTER DELETE ON categories  
FOR each ROW  
DELETE links FROM `links` WHERE `id_cat` = `id` ;
 
Or cela ne fonction pas totalement seul un seul enregistrement de link est supprimé.
Commet faire pour que ce trigger supprime tous les links dont le links.id_cat = cat.id
 
De plus est-il possible de faire déclencher un fonction depuis un trigger.
 
Merci de votre aide

mood
Publicité
Posté le 03-04-2008 à 00:35:15  profilanswer
 

n°1711984
bvtk
Posté le 03-04-2008 à 11:42:48  profilanswer
 

personne ne peux m'aider ?

n°1711988
bvtk
Posté le 03-04-2008 à 11:43:51  profilanswer
 

Personne ne peux m'aider ?  :??:

n°1712046
spish
Posté le 03-04-2008 à 12:13:43  profilanswer
 

Ta requête d'effacement doit-être fausse car j'ai des trigger identique chez moi et cela marche très bien.

n°1712054
bvtk
Posté le 03-04-2008 à 12:20:00  profilanswer
 

Si si elle fonction cette DELETE
Mais seul un des enregistrement de links fait l'objet du DELETE.
 

n°1712112
bvtk
Posté le 03-04-2008 à 13:41:44  profilanswer
 

En faite voici mes data:
 
Table CAT
Id         Name
1          A
2          B
 
Table link
Id         id_cat           Title
1          1                  AA  
1          1                  AB
1          2                  BA
1          1                  AC
1          2                  BB
 
Si je fait un DELETE table CAT where id=1
 
Seul un enregistrement de link est delete
 
Donc je pense que ceci viens du fait que je ne dispose que d'un enregistrement dans CAT impacté par mon delete.
un peu comme un "for each row" qui ne passe qu'une seule fois.
 
donc est-il possible de lancer une procédure depuis mon trigger.
tel que
CREATE PROCEDURE del_by_CatID(Catid INT)
BEGIN
DELETE links FROM `links` WHERE id=CatId
END;
 
CREATE TRIGGER del_cat AFTER DELETE on CAT
BEGIN
FOR EACH ROW
CALL del_by_CatID(OLD.id);
END;
 
Mais impossible de parvenir a créer. J'ai des Pb de syntaxe.
 
Une aide, mereci

n°1712133
spish
Posté le 03-04-2008 à 14:08:24  profilanswer
 

A l'heure actuelle, on ne peut pas lancer de procédure depuis un trigger
 
par contre tu pourrais essayer un truc du genre :
 

Code :
  1. CREATE trigger del_Cat AFTER DELETE ON categories 
  2. FOR each ROW 
  3. DELETE links FROM `links` WHERE `id_cat` = `OLD.id` ;

n°1712329
bvtk
Posté le 03-04-2008 à 17:31:11  profilanswer
 

OK merci

n°1719068
uncle buzz
Posté le 17-04-2008 à 11:48:30  profilanswer
 

Si j'ai bien compris le cas, il suffit de mettre une clé étrangère sur la table LINK pointant vers la table CAT sur le champs id_cat -> id et en précisant qu'à la suppression d'un enregistrement de CAT il faut effacer les enregistrements de LINK.
 
C'est une fonction standard, il faut que les tables soit sur le moteur InnoDB et mettre la clé étrangère en mode ON DELETE CASCADE (recherche la syntaxe je ne la connais pas de tête), ce qui fait que si tu efface un enregistrement dans CAT, MYSQL va effacer tous les "enfants" de cet enregistrement par cascade...  
 
Tu as aussi l'option RESTRICT qui t'interdit de supprimer un enregistrement qui aurai des enfants, SET NULL qui change à NULL les id_cat des enfants orphelins après suppression et NO ACTION dont le sens m'échappe un peu.
 
Ces options sont possibles aussi avec un UPDATE qui ne supprimerai pas ton enregistrement mais le modifierai simplement.
 
voir http://dev.mysql.com/doc/refman/5. [...] aints.html


Message édité par uncle buzz le 17-04-2008 à 11:54:26

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trigger MySQL 5

 

Sujets relatifs
Trigger / caractère echappement ss MySQL[MySql] Trigger structure conditionnelle [Résolu]
[MySQL] Trigger mettant à jour une autre tableComment faire pour annuler l'exécution d'un trigger sous Mysql ?
Problème pour la création d'un trigger dans MySQL[mysql] trigger lors d'une insertion...
[Mysql 5] Trigger qui bloque un INSERTMySQL : trigger impossible >> PLEASE HELP!
Trigger sous MYSQL[MySQL] trigger
Plus de sujets relatifs à : Trigger MySQL 5


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR