触发在删除时将一行插入另一行 table
Trigger to insert a row into another table on delete
我正在尝试创建一个触发器,它将包含所有列的行插入到另一个表中:
这是我目前得到的结果,但它不起作用:
delimiter $
CREATE TRIGGER item_deleted_move AFTER DELETE ON item
begin
insert into item_deleted (val1, val2, ...) values (old.val1, old.val2, ...);
end$
delimiter ;
您将分隔符更改为 $$
但在插入的末尾您使用的是 ;
错误的根源是您错过了 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演示
我正在尝试创建一个触发器,它将包含所有列的行插入到另一个表中:
这是我目前得到的结果,但它不起作用:
delimiter $
CREATE TRIGGER item_deleted_move AFTER DELETE ON item
begin
insert into item_deleted (val1, val2, ...) values (old.val1, old.val2, ...);
end$
delimiter ;
您将分隔符更改为 $$
但在插入的末尾您使用的是 ;
错误的根源是您错过了 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演示