J'utilise MySQL 5.1 et Workbench. J'ai besoin de remplir une table t1 à partir de plusieurs tables t2, t3 et t4 lorsque de nouveaux enregistrements sont insérés dans t2 (à partir d'un formulaire externe). J'ai créé un trigger sur t2 (après l'insertion) pour le faire. Cependant, chaque fois que j'ai de nouveaux enregistrements dans t2, il remplit t1 avec tous les enregistrements à nouveau (les nouveaux et les anciens). Ainsi, j'ai essayé de créer un second trigger sur t1 (après insertion) et de supprimer toutes les lignes dans t2, t3 et t4. Le résultat est que le formulaire externe se bloque et ne souhaite plus exporter les données dans t2, t3 et t4. Je suppose que c'est parce qu'il n'y a pas de synchronisation entre les deux déclencheurs, et qu'il peut être utile de supprimer les rangées de t2, t3, t4 en attendant d'insérer ces lignes dans t1. Comment pourrais-je faire autrement?MySQL - exécute un trigger après un autre trigger
Veuillez noter qu'il y a une clé primaire en série sur t1, qui n'est pas identique à t2, t3, t4.
Voici mon premier (INSERT) déclencheur (qui fonctionne):
delimiter |
CREATE TRIGGER nmp_odk.trigger_maj_baznat AFTER INSERT
ON nmp_odk.DEMO_OISEAUX12_CORE
FOR EACH ROW
BEGIN
INSERT INTO nmp_baznat_test.OBSERVATION (ID_PROJET,DATE_OBS,PRECISION_DATE,DATE_SAISIE,METHODE_LOCALISATION, CREATION, id_proprietaire,id_structure,
CODE_INSEE, ID_SITE, LONGWGS84,LATWGS84, Z, ZPRECISION,CD_DEPARTEMENT, DEPARTEMENT)
SELECT PROJET_ID, DATE_OBS, 'date précise', _SUBMISSION_DATE, METHODE_LOC, DATE_OBS, CONTRIB, nmp_odk.DEMO_OISEAUX12_CORE.ID_STRUCTURE,
insee_zerofill, NULL as id_site , GPS_TEL_LNG, GPS_TEL_LAT, GPS_TEL_ALT, NULL as alt_precis, code_dept, nom_dept_min
FROM nmp_odk.DEMO_OISEAUX12_REPEAT_LOC, nmp_odk.test_insee, nmp_odk.DEMO_OISEAUX12_CORE
LEFT JOIN nmp_baznat.AUTEUR
ON nmp_baznat.AUTEUR.ID_AUTEUR = nmp_odk.DEMO_OISEAUX12_CORE.CONTRIB
WHERE METHODE_LOC = '13'
AND nmp_odk.GISWithin(GeomFromText(CONCAT('POINT(',`GPS_TEL_LNG`,' ',`GPS_TEL_LAT`,')')), SHAPE)
AND nmp_odk.DEMO_OISEAUX12_CORE._URI = nmp_odk.DEMO_OISEAUX12_REPEAT_LOC._TOP_LEVEL_AURI
UNION
SELECT PROJET_ID, DATE_OBS, 'date précise', _SUBMISSION_DATE, METHODE_LOC, DATE_OBS, CONTRIB, nmp_odk.DEMO_OISEAUX12_CORE.ID_STRUCTURE,
INSEE_zero, ID_SITE, LONG_LIEU_DIT, LAT_LIEU_DIT, Z_LIEU_DIT, ZPRECISION, CD_DEPARTEMENT, DEPARTEMENT
FROM nmp_odk.DEMO_OISEAUX12_REPEAT_LOC
LEFT JOIN nmp_odk.site_clone
ON nmp_odk.site_clone.ID_SITE=nmp_odk.DEMO_OISEAUX12_REPEAT_LOC.SITE_OBS,
nmp_odk.DEMO_OISEAUX12_CORE
LEFT JOIN nmp_baznat.AUTEUR
ON nmp_baznat.AUTEUR.ID_AUTEUR = nmp_odk.DEMO_OISEAUX12_CORE.CONTRIB
WHERE METHODE_LOC = '2'
AND nmp_odk.DEMO_OISEAUX12_REPEAT_LOC.SITE_OBS is not NULL
AND nmp_odk.DEMO_OISEAUX12_CORE._URI = nmp_odk.DEMO_OISEAUX12_REPEAT_LOC._TOP_LEVEL_AURI
;
END;
|
delimiter ;
Et mon déclencheur SUPPRIMER:
delimiter |
CREATE TRIGGER nmp_baznat_test.trigger_delete_ODK AFTER INSERT
ON nmp_baznat_test.OBSERVATION
FOR EACH ROW
BEGIN
DELETE FROM nmp_odk.DEMO_OISEAUX12_REPEAT_OBS;
DELETE FROM nmp_odk.DEMO_OISEAUX12_CORE ;
DELETE FROM nmp_odk.DEMO_OISEAUX12_REPEAT_LOC ;
END; |
delimiter ;