Accueil > Forum > > > > MYSQL, TRIGGER, OLD, NEW
MYSQL, TRIGGER, OLD, NEW
lundi 25 septembre 2006 à 15:21:37 |
MYSQL, TRIGGER, OLD, NEW

Flux__
|
Bonjour,
J'ai un problème de trigger sous MySQL.
Je souhaiterais supprimer un enregistrement si il existe déja et inserer le nouveau à la place.
Je m'explique :
Sois la table t_user, avec les champs suivant :
- matricule (PK)
- pwd
- mail
- tel
J'ai dans ma base l'enregistrment existant suivant : 123456, monPassword, toto@france.com, 5.32.69
Lors de l'insert suivant :
insert into t_user (matricule,pwd,mail,tel) values (123456, monPassword, toto@france.com, 5.32.69)
Je ne veux pas que Mysql me crie une erreur de PK. Mais qu'il supprime
dans tout les cas l'ancien enregistrement pour insérer le nouveau sans
problème.
J'ai coder le trigger suivant :
delimiter //
create trigger tri BEFORE INSERT
on t_user
for each row
begin
set @mat=new.matricule;
delete from t_user where old.matricule = @mat;
end;//
Mais j'ai une erreur. Pouvez-vous m'aider dans ma démarche ?
Bonne journée.
Flux__
|
|
lundi 25 septembre 2006 à 18:42:39 |
Re : MYSQL, TRIGGER, OLD, NEW

crilun
|
crilun pourrais tu preciser ton message d'erreur?
|
|
mardi 26 septembre 2006 à 08:42:15 |
Re : MYSQL, TRIGGER, OLD, NEW

Flux__
|
Bonjour,
Escuser-moi j'ai oublié de préciser le code d'erreur renvoyer par MySQL.
Je répare mon erreur :
ERROR 1363 (HY000): There is no OLD row in on INSERT trigger
Merci, Bonne journée
Flux__
|
|
mardi 26 septembre 2006 à 09:50:09 |
Re : MYSQL, TRIGGER, OLD, NEW

crilun
|
crilun bizarre comme erreur en tout cas la réponse est dans ton message d'erreur, ca genere une erreur si il n'y a rien a supprimer, test donc si ton enregistrement existe avant de le supprimer a l'aide de :
if exist (SELECT * FROM t_user where old.matricule=@mat) then 'Suppression de l'enregistrement
|
|
mercredi 27 septembre 2006 à 11:18:30 |
Re : MYSQL, TRIGGER, OLD, NEW

sim51
|
Bonjour, Moi je dis que c'est normal que le old pose un problème et je vais vous le démontrer en posant une question. Sur quoi pointe le old en insert ???? Ba sur rien !!! Le old fonctionnement simpement sur les trigger en update. create trigger tri BEFORE INSERT on t_user for each row begin set @mat=new.matricule; set @pwd = new.pwd ... //on cherche si l'enregistrement existe déjà temp = "SELECT count(*) FROM t_user where matricule=@mat " if temp<>0 then //il existe déjà un enregistrement et tu le supprime
delete from t_user where old.matricule = @mat; //maintenant tu fais ton insertion insert into t_user (matricule,pwd,mail,tel) values (@mat, @pwd, @mail, @tel) end; bonne continuation N'oubliez d'aller voir le règlement de C-S ici N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
|
|
mercredi 27 septembre 2006 à 15:31:19 |
Re : MYSQL, TRIGGER, OLD, NEW

Flux__
|
Bonjour,
Merci pour cette réponse. je n'ai pas pus répondre avant.
Je test dès que je peux et te tiens au courrant.
Flux__
++
|
|
jeudi 28 septembre 2006 à 09:43:40 |
Re : MYSQL, TRIGGER, OLD, NEW

sim51
|
Re, au fait j'ai oublié le @ devant les temp : @temp = "SELECT count(*) FROM t_user where matricule=@mat " if @temp<>0 then Voilà. Bonne continuation. N'oubliez d'aller voir le règlement de C-S ici N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
|
|
jeudi 28 septembre 2006 à 10:31:00 |
Re : MYSQL, TRIGGER, OLD, NEW

Flux__
|
J'ai une erreur de synthase...
Voici les commandes :
use retraite; delimiter // create trigger tri BEFORE INSERT on t_retraite for each row begin set @mat = new.matricule; set @pwd = new.pwd; set @mail = new.mail; set @tel = new.tel; @temp = "SELECT count(*) FROM t_retraite where matricule=@mat "; if @temp<>0 then delete from t_retraite where old.matricule = @mat; insert into t_user (matricule,pwd,mail,tel) values (@mat, @pwd, @mail, @tel) end;//
Voici l'erreur :
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@temp = "SELECT count(*) FROM t_retraite where matricule=@mat "; if @temp<>0 t' at line 9
Merci de votre aide.
Flux__
|
|
jeudi 28 septembre 2006 à 13:58:21 |
Re : MYSQL, TRIGGER, OLD, NEW

sim51
|
essaye ça : create trigger tri BEFORE INSERT on t_retraite for each row begin set @mat = new.matricule; set @pwd = new.pwd; set @mail = new.mail; set @tel = new.tel; set @temp = SELECT count(*) FROM t_retraite where matricule=@mat; if @temp<>0 BEGIN delete from t_retraite where old.matricule = @mat; END insert into t_user (matricule,pwd,mail,tel) values (@mat, @pwd, @mail, @tel); end Je me suis trompé sur le if, dans les trigger il n'y a pas de then simplement un begin et un end (si l'instruction fait plus d'une ligne normalement). De plus il faut un set devant le premier temp pour assigner la valeur de la requête. Si cela ne marche essaye ceci sinon : create trigger tri BEFORE INSERT
on t_retraite
for each row
begin
set @mat = new.matricule;
set @pwd = new.pwd;
set @mail = new.mail;
set @tel = new.tel; if exists (SELECT count(*) FROM t_retraite where matricule=@mat)
BEGIN
delete from t_retraite where old.matricule = @mat;
END
insert into t_user (matricule,pwd,mail,tel) values (@mat, @pwd, @mail, @tel);
end Bonne continuation. N'oubliez d'aller voir le règlement de C-S ici N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
|
|
vendredi 29 septembre 2006 à 16:24:56 |
Re : MYSQL, TRIGGER, OLD, NEW

Malkuth
|
La je comprend pas
Je connait pas bien MySQL mais j'ai l'impression de voir un prob Tu as dis que old était vide dans un insert et tu l'utilise qdmême vaudrais mieux pas faire :
delimiter // create trigger tri BEFORE INSERT on t_user for each row begin delete from t_user where t_user.matricule = new.matricule; end;//
(Et puis y'as qu'une instruction)
de plus si for each row oblige a faire un éxécution du trigger a chaque ligne c'est pas super ( bon d'accord sur des login on fait pas souvent des insert en masse :
mais je trouve plus éléguant et plus optmiser (je peux me planter encore une fois je connait pas trop MySQL):
delimiter // create trigger tri BEFORE INSERT on t_user for each row begin delete from t_user where t_user.matricule IN (SELECT new.matricule FROM new); end;//
|
|
Cette discussion est classée dans : mysql, user, trigger, matricule, old
Répondre à ce message
Sujets en rapport avec ce message
MySQL 5.0.x et triggers : problème d'ajout de trigger [ par Vld ]
Bonjour à tous.Je cherche depuis pas mal de temps comment ajouter un trigger à ma table mais je bloque toujours au même endroit (erreur 1064, erreur d
trigger [ par tuteur59000 ]
BONJOURpouvez vous me decrire le choix de ces 2 triggers svp?merci create or replace Trigger Historise_ProposeBefore Update or Deleteon ProposeFor eac
création trigger sur mysql [ par Ninie972 ]
Bonjour, Je crée un triger sur mysql:CREATE TRIGGER modif_etat AFTER UPDATE ON VOEUX FOR EACH ROWcodev int(2);BEGINSELECT code_voeux into codev FROM v
mysql(rectification de ma question) [ par limalima ]
Bonjour, j'ai installé Mysql et au moment de l'installation on me demande un pass(je pense c'est le pass du root), j'ai crée un new user avec un p
problème avec un trigger mysql [ par lotfi213_b19 ]
Bonjour, je débute la programmation des triggers sous mysql, en fait,j'ai besoin d'un déclencheur qui m'indique quels sont les tuples qui viennent d'e
erreur "Supplied argument is not a valid MySQL result resource" [ par bidjoubob ]
Salut,Lorsque je transfères mon site comportant du PHP et une base de données en MYSQL, j'obtiens l'erreur "Supplied argument is not a valid MySQL res
options user pour mysql [ par bigjacky31 ]
Bonjour tout le monde, Voici mon probleme: J'ai installé un serveur mysql sur mon pc, et j'aimerais que celui-ci soit accessible pour un utilisateur d
AU SECOURS !!!!!!!!!!!!!!!!! Requete en MySQL [ par emma1006 ]
Salut à tous,J'ai un petit souci pour une requete en MySQL. Ca doit pas être bien compliquémais moi je sais pas comment faire pour compacter ma demand
UPDATE sur plusieurs tables [ par noreille79 ]
Voilà, j'ai un problème de syntaxe pour mes requêtes, pouvez vous m'aiderN'hésitez pas à me poser des questions!<?php<br /
trigger/mySql [ par hamzamalek ]
Bonjour à tous, je suis entrain de créé un trigger pour ma table messagearticle sous mysql qui à pour rôle d'empêcher l'insertion des lignes qui sont
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
BESOIN D'UN BIBESOIN D'UN BI par michimichid
Cliquez pour lire la suite par michimichid
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|