首页 新闻 赞助 找找看

mysql ,两列的运算结果作为新列写入数据表

0
悬赏园豆:100 [已解决问题] 解决于 2022-06-15 09:03

现有一个数据表,有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,不会触发触发器,也就不会计算

暖心系的主页 暖心系 | 初学一级 | 园豆:48
提问于:2022-06-14 19:58
< >
分享
最佳答案
1
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!

收获园豆:100
飒沓流星 | 小虾三级 |园豆:1099 | 2022-06-14 20:53

可能因为 insert into cal(a) c values(5)我是这样插入的,

新加一个触发器解决了!

暖心系 | 园豆:48 (初学一级) | 2022-06-15 09:02

@暖心系: emmmm,触发器是基于行触发的,可能字段都包含的插入才算是一行吧

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-15 09:18

@飒沓流星: 你说的有道理!

还想请教您一个问题,如果上面那个表里a列和b列的数据都在同一列没有分开,我想根据编号来判断它应该是减数还是被减数,然后分为两列,比如编号单数为减数,否则为被减数,应该怎么实现呢

暖心系 | 园豆:48 (初学一级) | 2022-06-16 12:30

@暖心系:

编号 row
1 1
2 2
3 3
4 4
编号只行号吗?单数指奇数吗?
像这样1,3为减数;2,4为被减数?
飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-16 15:06

@飒沓流星: 我就是想把这样编号前两层相同,第三层不同的数据写到一行然后相减

 

暖心系 | 园豆:48 (初学一级) | 2022-06-16 16:55

@暖心系: 用SQL写太复杂了,写个代码跑一下吧,而且应该在生成数据的时候就要判断了

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-16 18:23

@暖心系: SQL涉及到字符串截取,索引就会失效,数据量大的话就凉了

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-16 18:26

@飒沓流星: 好的,谢谢你

暖心系 | 园豆:48 (初学一级) | 2022-06-16 19:11

@暖心系: 客气😀

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-16 19:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册