【问题标题】:Mysql Trigger - Compound statementsMysql 触发器 - 复合语句
【发布时间】:2014-08-02 01:03:42
【问题描述】:

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

我想要实现的是在插入之前我想从活动表中复制记录 -> 历史表然后删除它们,然后进行插入。该代码非常适合从活动->历史复制记录。但是,一旦我将删除放入 ie 中,触发器就会立即响起。它仍然会移动记录,但不会删除旧行。

想法/想法?

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

【问题讨论】:

  • 触发器前有delimiter语句吗?

标签: mysql triggers


【解决方案1】:

如果 id 存在,我认为您需要更新,而不是删除然后插入。试试这个:

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

【讨论】:

    【解决方案2】:

    我认为如上所示的触发器语法不会按预期工作。与其触发选择 *,不如使用新行。因此,与其“插入 user_checkin_history 选择 *...”,不如让触发器具有“插入 user_checkin_history (a,b,c,d) 值 (new.a,new.b) 的效果。 ,new.c,new.d)" 然后只插入新行的内容。

    否则,每次用户插入某些内容时,您最终都会为给定用户获取所有 rowsx。这可能不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2012-04-13
      • 2015-01-10
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多