【问题标题】:Mysql trigger to update if date match and insert if no match all BEFORE INSERT如果日期匹配,Mysql 触发器更新,如果不匹配,则在插入之前全部插入
【发布时间】:2018-05-24 07:18:18
【问题描述】:
我有一张桌子summary。我希望在插入此表之前触发 TRIGGER,即summary,我想要的是,TRIGGER 应该检查传入日期是否与现有日期匹配,它应该更新表并将传入值添加到现有值,否则它应该只需插入
`摘要`
+------+--------+--------------+------+
|日期 |收入 |支出|其他|
|22/17 | 200 | 50 | 30 |
|22/17 | 100 | 10 | 80 |
|23/17 | 50 | 100 | 0 |
+------+--------+--------------+------+
`summary` // 这就是我想要的样子
+------+--------+--------------+------+
|日期 |收入 |支出|其他|
|22/17 | 300 | 150 | 30 |
|23/17 | 50 | 100 | 0 |
+------+--------+--------------+------+
我的表代码
创建表`摘要`(
`id_` int(11) NOT NULL,
`date_` 日期不为空,
`income_` 文本不为空,
`expenditure_` 文本不为空,
`other_` 文本不为空,
主键(id)
) 引擎=InnoDB 默认字符集=latin1;
插入“摘要”
(`id_`、`date_`、`income_`、`expenditure_`、`other_`)
价值观
(1, '2017-12-22', 200, 50, 30),
(2, '2017-12-22', 100, 10, 80),
(3, '2017-12-23', 50, 100, 0);
这是我迄今为止一直在尝试的,虽然我是一名诺维主义者
触发代码
分隔符
$$
创建触发器 inc_trig
插入前
关于收入_
每一行
开始
申报收入、支出、其他 INT;
SET收入=1; SET支出=2;设置其他=3;
如果(新日期_!=日期_)那么
IF NEW.name_ = 收入 THEN
插入摘要(日期_,收入)
值(new.date_,new.amount);
ELSEIF NEW.name_ = 支出 THEN
插入摘要(日期_,支出_)
值(new.date_,new.amount);
ELSEIF NEW.name_ = 其他 THEN
插入摘要(日期_,其他_)
值(new.date_,new.amount);
ELSE(new.date_ = date_)THEN
IF NEW.name_ = 收入_ THEN
更新摘要设置收入_ = 收入_ + new.amount);
ELSEIF NEW.name_ = 支出 THEN
更新摘要设置支出_ = 支出_ + new.amount);
ELSEIF NEW.name_ = 其他 THEN
更新摘要 SET other_ = other_ + new.amount);
万一;
结尾
$$
【问题讨论】:
标签:
mysql
validation
triggers
insert