如何创建触发器以在 MySQL 中插入和更新后更改状态?
How to create trigger to change status after insert and update in MySQL?
我有一个 table(输入),其中包含一些字段:
- check_number int(主键)
- 名称 varchar(20)
- 标称整数
- date1 日期
- date2 日期
- status varchar(20)
我想在这些条件下触发:
- 如果我在input_table中插入数据,那么状态会自动变为(Unpaid)(当我插入数据时date2为空)
- 如果日期 2 比日期 1 晚了 1 个月以上(并且是从日期系统计算的),则状态将变为(已过期)。对于这种情况,我没有插入或更新,它会自动从系统日期
- 如果 date2 在 date1 和 date2 之间的 1 个月范围内,状态将更改(付费)
例如:
- 日期 1 = 12-02-2015,日期 2 = 空,状态 = 未付款
- 日期 1 = 12-02-2015,日期 2 = 26-02-2-15,状态 = 已付款
- date1 = 12-02-2015,date2 = 12-03-2015(现在没有插入或更新的日期),status = Expired
谢谢
您无法使用触发器来满足您的所有要求。
无论如何,您可以做的最好的事情是即时计算 status
或在 WHERE
子句中使用相同的条件(如果您正在获取特定状态的行 [=15] =]
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演示
我有一个 table(输入),其中包含一些字段:
- check_number int(主键)
- 名称 varchar(20)
- 标称整数
- date1 日期
- date2 日期
- status varchar(20)
我想在这些条件下触发:
- 如果我在input_table中插入数据,那么状态会自动变为(Unpaid)(当我插入数据时date2为空)
- 如果日期 2 比日期 1 晚了 1 个月以上(并且是从日期系统计算的),则状态将变为(已过期)。对于这种情况,我没有插入或更新,它会自动从系统日期
- 如果 date2 在 date1 和 date2 之间的 1 个月范围内,状态将更改(付费)
例如:
- 日期 1 = 12-02-2015,日期 2 = 空,状态 = 未付款
- 日期 1 = 12-02-2015,日期 2 = 26-02-2-15,状态 = 已付款
- date1 = 12-02-2015,date2 = 12-03-2015(现在没有插入或更新的日期),status = Expired
谢谢
您无法使用触发器来满足您的所有要求。
无论如何,您可以做的最好的事情是即时计算 status
或在 WHERE
子句中使用相同的条件(如果您正在获取特定状态的行 [=15] =]
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演示