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');