MySQL Триггер после вставки
Я новичок в MySQL. У меня есть две таблицы total_loaner и available_loaner. Я пытаюсь создать триггер для каждой новой строки, добавленной в total_loaner, я бы добавил эту новую строку в available_loaner.
Вот как выглядят мои таблицы:
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`)
)
Мой триггер не работает.
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;
Ответы
Ответ 1
В вашем случае вы можете переписать свой триггер следующим образом
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');
Примечание:
- одинарные кавычки удалены из имени таблицы
total_loaner
, потому что кавычки фактически делают его строковым литералом вместо правильного идентификатора. Вы можете использовать обратные тики, если хотите, но это не нужно, поскольку это не зарезервированное слово и оно не содержит специальных символов.
- поскольку он запускает один оператор, теперь вам не нужно использовать команду
DELIMITER
и BEGIN...END
block
Вот SQLFiddle демо
Ответ 2
Вероятно, вам нужно установить разделитель:
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 ;
Прямо сейчас это путает полуточку в конце инструкции INSERT
с концом инструкции CREATE TRIGGER
.
Ответ 3
Это работало для меня, более упрощенная версия.
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);
Ответ 4
AFTER INSERT ON `total_loaner`
Используйте обратные ссылки.
Ответ 5
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');