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 ;
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
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
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