触发在删除时将行插入另一个表

时间:2015-01-02 16:13:28

标签: mysql sql triggers

我正在尝试创建一个触发器,它会将包含所有列的行插入另一个表中:

这是我到目前为止所做的,但它不起作用:

delimiter $$
CREATE TRIGGER item_deleted_move AFTER DELETE ON item
begin
insert into item_deleted (val1, val2, ...) values (old.val1, old.val2, ...);
end$$
delimiter ;

2 个答案:

答案 0 :(得分:2)

错误的根源是您错过CREATE TRIGGER语句所需的FOR EACH ROW子句。

DELIMITER $$
CREATE TRIGGER item_deleted_moved 
AFTER DELETE ON item
FOR EACH ROW -- You missed this part
BEGIN
  INSERT INTO item_deleted(val1, val2, ...) VALUES (old.val1, old.val2, ...);
END$$
DELIMITER ;

现在,如果您在触发器中除了插入之外没有做任何其他操作,则可以通过不使用BEGIN ... END块来简化它。在这种情况下,您不需要更改分隔符。

CREATE TRIGGER item_deleted_moved 
AFTER DELETE ON item
FOR EACH ROW
  INSERT INTO item_deleted(val1, val2, ...) VALUES (old.val1, old.val2, ...);

这是 SQLFiddle 演示

答案 1 :(得分:0)

您将分隔符更改为$$,但在插入的末尾您使用;

相关问题