现有一个数据表,有a,b两列,a和b不一定同时写入,要在新数据插入时对两列数据进行加法运算,并将运算结果写进数据库表
create table cal(
a VARCHAR(10),
b VARCHAR(10),
c varchar(10)
)
DROP TRIGGER IF EXISTS t_cal_data;
CREATE TRIGGER t_cal_data
before insert
ON cal
FOR EACH ROW
set new.c=new.a-new.b
我就写了个触发器,但是只有a,b同时插入才会计算;怎么才能做到不同时写入也能计算呢?
还有一个问题,如果我直接修改表把a和b补齐,就不属于insert,不会触发触发器,也就不会计算
CREATE TRIGGER call_tr BEFORE INSERT ON `call` FOR EACH ROW
set new.c=new.a-new.b
INSERT INTO `call` VALUES ('1', '', '');
INSERT INTO `call` VALUES ('', '1', '');
INSERT INTO `call` VALUES ('1', '1', '');
a,b分开插入,都触发了呀!!!
修改的话应该需要再创建一个触发器 before update!
可能因为 insert into cal(a) c values(5)我是这样插入的,
新加一个触发器解决了!
@暖心系: emmmm,触发器是基于行触发的,可能字段都包含的插入才算是一行吧
@飒沓流星: 你说的有道理!
还想请教您一个问题,如果上面那个表里a列和b列的数据都在同一列没有分开,我想根据编号来判断它应该是减数还是被减数,然后分为两列,比如编号单数为减数,否则为被减数,应该怎么实现呢
@暖心系:
编号 | row |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
编号只行号吗?单数指奇数吗? | |
像这样1,3为减数;2,4为被减数? |
@飒沓流星: 我就是想把这样编号前两层相同,第三层不同的数据写到一行然后相减
@暖心系: 用SQL写太复杂了,写个代码跑一下吧,而且应该在生成数据的时候就要判断了
@暖心系: SQL涉及到字符串截取,索引就会失效,数据量大的话就凉了
@飒沓流星: 好的,谢谢你
@暖心系: 客气😀