bonjour,


J'ai actuellement un petit problème par rapport à un trigger.

ma table:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `ligand_nom` (
  `id_lig` int(11) NOT NULL,
  `nom` varchar(250) NOT NULL,
  `officiel` BOOL NOT NULL,
  PRIMARY KEY (`id_lig`, `nom`),
  FOREIGN KEY (`id_lig`) REFERENCES ligands(`id`)
) ENGINE=InnoDB;
un ligand pouvant avoir de multiples (n) synonymes, mais un seul nom officiel, le booléen sera donc pour un même id_lig : (n-1) fois à 0 et 1 fois à 1.

J'ai donc crée un trigger, pour éviter l'ajout de plus d'un nom considéré comme officiel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER //
CREATE TRIGGER `trig_add_nom_lig`
BEFORE INSERT ON `ligand_nom` 
FOR EACH ROW
  IF (NEW.officiel>=1) THEN 
    DECLARE COMPTEUR_OFF INTEGER; 
    SELECT count(id_lig) INTO COMPTEUR_OFF FROM ligand_nom WHERE id_lig=NEW.id_lig AND officiel=NEW.officiel; 
    IF (COMPTEUR_OFF>=1) THEN
      SET NEW.officiel=0; 
    END IF; 
  END IF; 
END;//
DELIMITER ;
malheureusement, ça ne fonctionne pas, je peux toujours insérer des données avec le même id_lig et officiel à 1...

Si quelqu'un a une petite idée du pourquoi du comment ... ça m'aiderai beaucoup

Merci d'avance.