Mysql触发器 - 复合语句

时间:2014-08-02 01:03:43

标签: mysql triggers

寻找有关mysql触发器和使用多个语句的一些帮助。

我想要实现的是在插入之前我想从活动表中复制记录 - >历史表然后删除它们,然后执行插入操作。该代码非常适用于从active->历史记录中复制记录。但是,只要我把删除放在ie中,Trigger就会出现问题。它仍将移动记录,但不会删除旧行。

思想/想法?

CREATE 
DEFINER = 'root'@'%'
TRIGGER tradesfinder.On_Checkin_active_Insert
BEFORE INSERT
ON tradesfinder.user_checkin_active
FOR EACH ROW
BEGIN

INSERT INTO user_checkin_history
SELECT *
FROM user_checkin_active
WHERE user_id = new.user_id;

DELETE FROM user_checkin_active 
WHERE user_id = new.user_id;
END

提前致谢。

C

2 个答案:

答案 0 :(得分:0)

我认为如果id不存在,则需要更新然后插入。试试这个:

INSERT INTO `user_checkin_active` (user_id, b, c) 
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE b =new.b, c = new.c;

答案 1 :(得分:0)

我认为上面显示的触发器语法不会按预期工作。而不是触发select *,最好使用新行。因此,而不是“插入user_checkin_history select * ...”而不是想让触发器具有“插入user_checkin_history(a,b,c,d)值”(new.a,new.b)的效果。 ,new.c,new.d)“然后只插入新行的内容。

否则,在用户插入内容时,您最终会为给定用户选取所有rowsx。这可能不是你想要的。