如何在MySQL中插入和更新后创建触发器以更改状态?

时间:2015-02-16 15:26:45

标签: mysql date triggers insert insert-update

我有一个表(输入),其中包含一些字段:

  • check_number int(主键)
  • name varchar(20)
  • nominal int
  • date1 date
  • date2 date
  • status varchar(20)

我想用这些条件触发:

  • 如果我在input_table中插入数据,那么状态将自动变为(未付费)(当我插入数据时,date2为空)
  • 如果date2在date1之后超过1个月(并且从日期系统开始计算),则状态将变为(Expired)。对于这种情况,我没有插入或更新,它会自动从系统日期开始
  • 如果date2在date1和date2之间的1个月范围内,则状态将更改(付费)

例如:

  • date1 = 12-02-2015,date2 = null,status = Unpaid
  • date1 = 12-02-2015,date2 = 26-02-2-15,status =付费
  • date1 = 12-02-2015,date2 = 12-03-2015(现在没有插入或更新的日期),状态=已过期

谢谢

1 个答案:

答案 0 :(得分:0)

您无法通过触发器覆盖所有要求。

你可以做什么,最好还是做什么就是动态计算status或在WHERE子句中使用相同的条件,如果你正在获取特定状态的行

SELECT t.*,
       CASE WHEN date2 IS NULL AND 
                 date1 >= CURDATE() - INTERVAL 1 MONTH THEN 'Unpaid'
            WHEN date2 <= date1 + INTERVAL 1 MONTH THEN 'Paid'
            WHEN date2 IS NULL AND
                 date1 < CURDATE() - INTERVAL 1 MONTH THEN 'Expired' END status
  FROM input_table t

示例输出:

| CHECK_NUMBER | NAME | NOMINAL |             DATE1 |             DATE2 |  STATUS |
|--------------|------|---------|-------------------|-------------------|---------|
|            1 | John |       1 | February, 16 2015 |            (null) |  Unpaid |
|            2 | Jane |       1 | February, 03 2015 | February, 17 2015 |    Paid |
|            3 | Mark |       1 |  January, 16 2015 |            (null) | Expired |

这是 SQLFiddle 演示