2011-06-20 4 views
2

Avec les tableaux suivants:Aide à l'écriture trigger MySQL

Party.(PartyId, PartyTypeCode) et Member.(MemberId (FK), Name)

Je veux remplir la colonne MemberID avec la valeur du PartyId après une nouvelle Partie est créé.

Je sais que le SQL ci-dessous est faux mais c'est pourquoi je cherche de l'aide pour faire les choses correctement.

CREATE TRIGGER tgr_member_create AFTER INSERT on Party 
FOR EACH ROW BEGIN 
    IF NEW.PartyTypeCode = 'M' THEN 
     INSERT Member(MemberId) 
     VALUES('Party.PartyId') 
    END IF; 
END; 

Merci à l'entrée de Nanne c'est ce qui fonctionne:

DELIMITER $$ 

CREATE TRIGGER tgr_member_create AFTER INSERT on Party 
FOR EACH ROW BEGIN 
    IF NEW.PartyTypeCode = 'M' THEN 
     INSERT Member (MemberId,Name) 
     VALUES(NEW.PartyId, 'someName'); 
    END IF; 
END;$$ 

DELIMITER ; 

Répondre

1

Vos valeurs doivent appeler la ligne NEW, comme vous le faites avec le partytypecode je suppose? Je suppose

delimiter $$ 

CREATE TRIGGER tgr_member_create AFTER INSERT on Party 
FOR EACH ROW BEGIN 
    IF NEW.PartyTypeCode = 'M' THEN 
     INSERT Member (MemberId,Name) 
     VALUES(NEW.PartyId, 'someName') 
    END IF; 
END;$$ 

Faites attention au code delimiter. Parce que vous utilisez ; à l'intérieur, vous ne pouvez pas l'utiliser comme un jeton normal de «fin de commande». Voilà pourquoi la &&

Pour le débogage: Assurez-vous que la requête fonctionne lorsque vous effectuez à l'extérieur d'un déclencheur:

INSERT Member (MemberId,Name) 
VALUES(party-id goes here, 'someName') 

Il pourrait y avoir une petite erreur là. Remplissez votre partyId évidemment.

+0

merci. Je reçois toujours une erreur quand j'essaye d'ajouter ceci à la DB. "Cela ne remplira pas le champ" nom "de la table des membres :)" Cela pourrait-il faire partie du problème puisque Name est un champ obligatoire? Ai-je besoin d'ajouter cela à la gâchette? L'erreur est générique "# 1064 - Vous avez une erreur dans votre syntaxe SQL, consultez le manuel correspondant à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'END IF' à la ligne 6" – enfield

+0

Eh bien, le sql que vous faites votre déclencheur doit être valide. Donc, si le nom est requis, vous devriez l'ajouter. L'erreur est autre chose. Est-ce que vous faites tout bien avec les délimiteurs? Je vais ajouter un exemple plus complet – Nanne

+0

merci pour votre aide. J'ai pris votre code et ajouté DELIMITER; surmonter le; à l'intérieur comme j'avais. Maintenant que j'ai cela, je pense que je vais peut-être mal tourner les choses. Peut-être ai-je besoin d'une procédure stockée plutôt que d'un déclencheur puisque j'obtiendrai mon nom d'un formulaire PHP? – enfield

-1

Essayez cette

CREATE TRIGGER tgr_member_create AFTER INSERT on Party 
FOR EACH ROW BEGIN 
    IF NEW.PartyTypeCode = 'M' THEN 
     INSERT Member(MemberId) 
     VALUES('New.PartyId') 
    END IF; 
END;