MySQL插入后触发器

23

我是MySQL的新手。我有两个表格total_loaneravailable_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;
4个回答

32

在您的情况下,您可以像这样重写您的触发器

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块。

这里是SQLFiddle演示。


9

您可能需要设置分隔符:

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语句的末尾混淆了。


6
这个方法对我有用,是更简化的版本。
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);

如果另一个表的列名不同,我们应该怎么办? - TB.M

0
AFTER INSERT ON `total_loaner`

使用反引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接