2010-04-01 4 views
1

J'ai une application où j'ai besoin d'INSÉRER une valeur auto_increment d'un PK dans une autre table. Je sais comment faire cela en PHP, mais j'ai besoin de faire cela au niveau DB, puisque je ne peux pas changer la logique du programme. Je suis nouveau pour les déclencheurs, donc je suis sûr que ce sera une réponse facile pour quelqu'un. Voici ce que j'ai jusqu'à présent:Création de Trigger MySQL

DELIMITER // 
    CREATE TRIGGER new_project AFTER INSERT ON m_quality_header 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO m_quality_detail (d_matl_qa_ID) VALUES (NEW.h_matl_qa_ID); 
    END// 
DELIMITER ; 

Je veux juste la valeur de la valeur AUTO_INCREMENT de h_matl_qa_ID à insérer un nouvel enregistrement dans d_matl_qa_ID. L'erreur que je reçois est:

"This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table' 

Mais, je ne veux pas mettre à jour la table qui a la gâchette, alors pourquoi est mon code actuel considéré comme un déclencheur « multiple »?

Ceci est sur MySQL 5.0.45-7.el5 fonctionnant sur un serveur CentOS 5 (Intel 64 bits) Si je le dois, je peux modifier le code PHP, mais cela doit être le dernier recours.

+1

Avez-vous défini un autre déclencheur 'AFTER INSERT ON m_quality_header'? Utilisez 'SHOW TRIGGERS WHERE événement = 'INSERT' ET timing = 'AFTER' ET \' table \ '= 'm_quality_header'' à vérifier (http://dev.mysql.com/doc/refman/5.0/fr/show- triggers.html). – outis

+0

En cas de supposition, l'option 'BEFORE EACH ROW' est considérée comme un trigger multiple, car elle se déclenche une fois pour chaque ligne insérée. – Powerlord

+0

OK, j'ai obtenu mon Trigger fonctionne correctement maintenant .. Voici le code final que je avais besoin pour que cela fonctionne comme je le voulais: DELIMITER // DROP TRIGGER IF EXISTS new_project // CREATE TRIGGER new_project APRÈS INSERT ON m_quality_header POUR CHAQUE RANGEE BEGIN INSERT INTO m_quality_detail VALUES (d_matl_qa_ID, d_matl_qa_project_test_number) (LAST_INSERT_ID(), LAST_INSERT_ID()); END // DELIMITER; – bgarlock

Répondre

0

Si vous avez essayé de créer le déclencheur avant, comme Outis états ci-dessus, vous pouvez taper la commande

SHOW TRIGGERS; 

et il vous dira.

Si tel est le cas, ce que je fais en général est question

DROP TRIGGER IF EXISTS my_trigger_name; 

puis recréez le déclencheur.

Votre code de déclencheur, sinon, semble OK.

0
DELIMITER // 
    DROP TRIGGER IF EXISTS new_project// 
    CREATE TRIGGER new_project AFTER INSERT ON m_quality_header 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO m_quality_detail 
     (d_matl_qa_ID, d_matl_qa_project_test_number) VALUES (LAST_INSERT_ID(),  LAST_INSERT_ID()); 
    END// 
DELIMITER ; 
Questions connexes