Je suis nouveau sur MySQL. J'ai deux tables total_loaner et available_loaner. J'essaie de créer un déclencheur pour chaque nouvelle ligne ajoutée dans total_loaner. J'aimerais ajouter cette nouvelle ligne à available_loaner.
Voici à quoi ressemblent mes tables:
CREATE TABLE `total_loaner` (
`Kind` varchar(10) NOT NULL,
`Type` varchar(10) NOT NULL,
`Sno` varchar(10) NOT NULL,
PRIMARY KEY (`Sno`)
)
CREATE TABLE `available_loaner` (
`Kind` varchar(10) NOT NULL,
`Type` varchar(10) NOT NULL,
`Sno` varchar(10) NOT NULL,
`Status` char(10) NOT NULL DEFAULT '',
PRIMARY KEY (`Sno`)
)
Ma gâchette ne semble pas fonctionner.
CREATE TRIGGER new_loaner_added
AFTER INSERT ON 'total_loaner' for each row
begin
INSERT INTO available_loaner (Kind, Type, Sno, Status)
Values (new.Kind, new.Type, new.Sno, 'Available');
END;
Dans votre cas, vous pouvez réécrire votre déclencheur comme ceci
CREATE TRIGGER new_loaner_added
AFTER INSERT ON total_loaner
FOR EACH ROW
INSERT INTO available_loaner (Kind, Type, Sno, Status)
VALUES (NEW.Kind, NEW.Type, NEW.Sno, 'Available');
Remarque:
total_loaner
, car les guillemets en font un littéral de chaîne au lieu d'un identifiant approprié. Vous pouvez utiliser des ticks arrière si vous le souhaitez, mais cela est inutile car ce n'est pas un mot réservé et il ne contient aucun caractère spécial. DELIMITER
ni le bloc BEGIN...END
.Voici SQLFiddle démo
Vous devez probablement définir votre délimiteur:
DELIMITER $$
CREATE TRIGGER new_loaner_added
AFTER INSERT ON `total_loaner` for each row
begin
INSERT INTO available_loaner (Kind, Type, Sno, Status)
Values (new.Kind, new.Type, new.Sno, 'Available');
END$$
DELIMITER ;
À l'heure actuelle, le point-virgule à la fin de l'instruction INSERT
est confondu avec celui de l'instruction CREATE TRIGGER
.
Celui-ci a fonctionné pour moi, version plus simplifiée ..
CREATE TRIGGER new_loaner_added
AFTER INSERT ON `DB1`.`table_name`
FOR EACH ROW
INSERT INTO `DB2`.`table_name` (messageID, conversationID, fromJID)
VALUES (NEW.messageID,NEW.conversationID, NEW.fromJID);
AFTER INSERT ON `total_loaner`
Utilisez des backticks.