Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 Mysql Triggers Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
PoP_NicoW
Forumeur fréquent
Forumeur fréquent


BTS IG - Option réseau 2ème année

Messages: 57

MessagePosté le: Lun 09 Nov 2009 - 16:43 Répondre en citantRevenir en haut

Bonjour,

j'ai commencé ma PTI base de données, donc j'ai choisi de le faire sur mysql (que j'utilise sans interface graphique).
Je suis bloqué pour faire mon trigger, j'ai pas trop compris comment les créer en faite et aussi la syntaxe. Je sais pas si c'est la bonne.

Voici ce que j'ai fait :

Le trigger est censé vérifier si un titre de film existe pas déja dans la table FILM quand l'utilisateur utilise un INSERT pour cette table.

CREATE TRIGGER Verif_Film
BEFORE INSERT OF Titre_Film
ON Film
FOR EACH STATEMENT
BEGIN ATOMIC
DECLARE nv_Titre VARCHAR(60);
DECLARE nb_Titre INT;

SELECT nv_Titre=Titre_Film From INSERTED
SELECT nb_Titre=count(*) from film
WHERE titre_film=nv_titre
IF (@nb_titre > 1)

Raiserror (le film existe deja)
Rollback work

END

END

Je me suis inspiré de plusiuer exemple que j'ai vu sur internet et de potes qui ont déja passé leurs BTS.
Donc pour la syntaxe j'ai un peu fait un mixe ne sachant si c'est la meme pour tout les SGBD.

Et donc la deuxieme question : comment l'intégrer a ma BDD, juste a la taper tel quel en ligne de commande ?

merci d'avance Wink

_________________
si y'a un probleme y'a une solution, si y'a pas de solution y'a pas de probleme.
Voir le profil de l'utilisateurEnvoyer un message privé

N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire.
Cretine
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 136
Localisation: Dtc / Mtp - Mende

MessagePosté le: Lun 09 Nov 2009 - 17:07 Répondre en citantRevenir en haut

Bon je sais pas trop avec MySQL parce que nous on fait avec SQLServer, donc y a des trucs que je comprends pas trop genre euh ça :

"FOR EACH STATEMENT
BEGIN ATOMIC"

Enfin on l'utilise pas quoi.
Mais sinon, je crois que c'est juste.

(Enfin le meilleur moyen de savoir c'est de le tester hein Wink )

_________________
"Comme une envie de tout plaquer, me jeter à terre, satisfait du moindre geste sans en avoir l'air... Si par principe j'admets les failles de votre part, veuillez accepter les raisons de mon désespoir"
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
PoP_NicoW
Forumeur fréquent
Forumeur fréquent


BTS IG - Option réseau 2ème année

Messages: 57

MessagePosté le: Lun 09 Nov 2009 - 18:09 Répondre en citantRevenir en haut

Salut cretine,

Justement c'est de se genre de chose que je veux parler.

Je ne suis pas du tout sur des syntaxe puisque j'ai pris ca d'un exemple pour SQLserver. le BEGIN ATOMIC a l'air d'etre utilisé juste avec MySQL(enfin a vrai dire j'en sais trop rien).

C'est le soucis, j'aimerais bien que quelqu'un me dise les bonne syntaxe, l'équivalence de ce que j'ai fait mais pour MySQL, j'ai rien trouvé sur le net :/

Oaui, le tester c'est sur, mais je le créé comment dans ma bdd ? je l'écris en ligne de commande et c'est bon ?

En tout cas merci de ta réponse.

_________________
si y'a un probleme y'a une solution, si y'a pas de solution y'a pas de probleme.
Voir le profil de l'utilisateurEnvoyer un message privé
PoP_NicoW
Forumeur fréquent
Forumeur fréquent


BTS IG - Option réseau 2ème année

Messages: 57

MessagePosté le: Lun 09 Nov 2009 - 18:17 Répondre en citantRevenir en haut

Je viens de trouver ca, enfaite ca a l'air d'etre la même syntaxe :

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
-> FOR EACH ROW
-> BEGIN
-> IF NEW.amount <0> SET NEW.amount = 0;
-> ELSEIF NEW.amount > 100 THEN
-> SET NEW.amount = 100;
-> END IF;
-> END//
mysql> delimiter ;

_________________
si y'a un probleme y'a une solution, si y'a pas de solution y'a pas de probleme.
Voir le profil de l'utilisateurEnvoyer un message privé
Cretine
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 136
Localisation: Dtc / Mtp - Mende

MessagePosté le: Lun 09 Nov 2009 - 18:26 Répondre en citantRevenir en haut

Ouais pour l'intégrer à ta BD tu fais "nouvelle requête" CREATE TRIGGER machin truc bidule et hop, exécuter ! Enfin, comme je te l'ai dit nous on est sous SQLServer et pas sous MySQL, si tu veux je te fais un c/c d'une syntaxe de trigger mais j'sais pas si ça peut t'aider.


CREATE TRIGGER [Nom_de_ton_trigger]
ON [Nom_de_ta_table]
FOR Insert (ou update, ou delete)
AS

IF [Ta contrainte]
BEGIN
Raiserror ('Ceci est un message d'erreur',16,1)
Rollback transaction
END

_________________
"Comme une envie de tout plaquer, me jeter à terre, satisfait du moindre geste sans en avoir l'air... Si par principe j'admets les failles de votre part, veuillez accepter les raisons de mon désespoir"
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum