MySQL触发器 - 在UPDATE条件下INSERT

时间:2011-05-19 07:51:52

标签: mysql triggers insert

我正在尝试找到在触发器表上更新特定字段时将数据插入另一个表的最有效方法。 INSERT应仅在特定类型的更新中发生。

我想要创建触发器的表名为 incremental 。我插入的表名为 crm_record

在增量上有一个名为status的字段。默认情况下,当记录最初添加到表时,状态字段将设置为新。结算处理后,该值更改为已处理。所以一旦发生这种情况,我想INSERT进入crm_record,只有当另一个字段(success)的值设置为1时才会这样。

我考虑过同时使用CASE和IF,但希望专家对最佳方法有所了解。

2 个答案:

答案 0 :(得分:1)

好吧,我最终选择了这个似乎有效的方法。谢谢你指出我正确的方向

CREATE TRIGGER `incremental5_after_ins_tr_crmm` AFTER UPDATE ON `incremental5`
FOR EACH ROW
BEGIN
IF Status = 'processed' AND Success = 1 THEN
INSERT INTO crm_master (msisdn,source,contract_type,revenue) VALUE    (new.msisdn,'INC5',new.contract_type,revenue=revenue+2.5)
ON DUPLICATE KEY UPDATE contract_type=new.contract_type,revenue=revenue+2.5;
END IF;
END;

答案 1 :(得分:0)

您需要做的就是创建AFTER UPDATE触发器并一起测试statussuccess的值。如果它只是一个你正在测试的状态,那么IF语句将是最简单的方法。

然而,在实现触发器之前,总是值得返回一个步骤并检查crm_record和{{1}时是否应该通过代码逻辑实际插入status中的行}列已更新。