Trigger mysql erifier existance avant insert
Fermé
sezam2
Messages postés
73
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
26 mars 2010
-
2 juin 2009 à 18:13
Le marocain - 18 juil. 2009 à 17:19
Le marocain - 18 juil. 2009 à 17:19
A voir également:
- Trigger mysql erifier existance avant insert
- Touche insert - Guide
- Dans la présentation à télécharger, sarah avait encadré directement le titre de certaines diapositives avant d’automatiser cette mise en forme pour tout le document. sur quelles diapositives avait-elle encadré directement le titre ? ✓ - Forum Bureautique
- Veuillez patienter quelques minutes avant de réessayer instagram ✓ - Forum Instagram
- Mysql community server - Télécharger - Bases de données
- Avant browser - Télécharger - Navigateurs
2 réponses
Bonjour,
moi aussi j'avais un problème pour les trigger sous Mysql mais j'ai réussi "hamdolilah" à réalisé deux exemples qui marche, bien à vous ts.
voilà un 1er exemple :
delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END//
delimiter ;
2ème exemple :
drop trigger cont_depart_update;
DELIMITER //
CREATE TRIGGER cont_depart_update AFTER UPDATE ON tacheassigne
FOR EACH ROW
BEGIN
DECLARE idProjet varchar(20);
DECLARE moyenneAcompli varchar(5);
select p.idp into @idProjet
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta=New.idta;
select avg(ta.accompli) into @moyenneAcompli
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta in (select ta.idta from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where p.idp=@idProjet)
group by p.idp;
update projet set accompli=@moyenneAcompli where idp=@idProjet;
END//
delimiter;
/////////////////////////////////////////////////////////////////////////////////
RQ :
* en mysql c'est "NEW" c'est pas comme ORACLE ":NEW"
* utiliser les delimiter (existe aussi au niveau de la console de mysql)
* l'appel des varriables c'est avec "@" et non & comme ORACLE
/////////////////////////////////////////////////////////////////////////////////
moi aussi j'avais un problème pour les trigger sous Mysql mais j'ai réussi "hamdolilah" à réalisé deux exemples qui marche, bien à vous ts.
voilà un 1er exemple :
delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END//
delimiter ;
2ème exemple :
drop trigger cont_depart_update;
DELIMITER //
CREATE TRIGGER cont_depart_update AFTER UPDATE ON tacheassigne
FOR EACH ROW
BEGIN
DECLARE idProjet varchar(20);
DECLARE moyenneAcompli varchar(5);
select p.idp into @idProjet
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta=New.idta;
select avg(ta.accompli) into @moyenneAcompli
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta in (select ta.idta from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where p.idp=@idProjet)
group by p.idp;
update projet set accompli=@moyenneAcompli where idp=@idProjet;
END//
delimiter;
/////////////////////////////////////////////////////////////////////////////////
RQ :
* en mysql c'est "NEW" c'est pas comme ORACLE ":NEW"
* utiliser les delimiter (existe aussi au niveau de la console de mysql)
* l'appel des varriables c'est avec "@" et non & comme ORACLE
/////////////////////////////////////////////////////////////////////////////////
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
2 juin 2009 à 19:06
2 juin 2009 à 19:06
Bonjour,
Effectivement le trigger sera très lent ... La méthode la plus "propre" pour moi :
1/ mets une clé unique sur ip_adress (UNIQUE KEY `ip_address` (ìp_address`) )
2/ utilise la syntaxe INSERT IGNORE INTO hosts ...
Le IGNORE dit à MySQL de ne pas tenir compte de l'erreur d'insertion, et la clé unique garantit que tu ne pourras pas avoir 2 fois la même IP dans ta table :)
Bon courage
Effectivement le trigger sera très lent ... La méthode la plus "propre" pour moi :
1/ mets une clé unique sur ip_adress (UNIQUE KEY `ip_address` (ìp_address`) )
2/ utilise la syntaxe INSERT IGNORE INTO hosts ...
Le IGNORE dit à MySQL de ne pas tenir compte de l'erreur d'insertion, et la clé unique garantit que tu ne pourras pas avoir 2 fois la même IP dans ta table :)
Bon courage