如何实现一张表的某个字段为另一张表的某字段的计算值?

时间:2022-06-30 14:44:19
有一张表AA 有字段 a b c
另一张表BB 字段 aa bb cc

如何实现AA表的字段b(为整数型)中的数据 是BB表中的cc字段(为整数型)所有数据记录的总和(sum)!
要求做到BB表数据记录增加的同时AA表中字段b的记录值自动同步更新。

麻烦各位大虾指点下。。。。。。

9 个解决方案

#1


这个就用触发器把,建一个 insert 触发器就可以

#2


忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧

#3


引用 2 楼 chengdudeyun 的回复:
忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧


还是得用触发器,每次插入数据的时候,只是把新插入的值累加到,a表的b字段,这样不久快了。

#4


引用 2 楼 chengdudeyun 的回复:
忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧


对了 BB表海量数据,有多少呢?

#5


另外,在表上建立相应的索引,也能加快处理的速度

#6


这个,个人觉得没什么用呀!B表在高频更新,求的sum肯定一直在变动,就算此刻你看到了一个sum值,但下一刻马上又变了,那这个数据能起到什么作用。。。

#7


数据有上亿  
取这个sum值肯定是有用的啊  数据是一个金额数据  需要不断获取这个数据的总金额
yupeigu的意思是建立索引和触发器?

#8


引用 7 楼 chengdudeyun 的回复:
数据有上亿  
取这个sum值肯定是有用的啊  数据是一个金额数据  需要不断获取这个数据的总金额
yupeigu的意思是建立索引和触发器?


对的,触发器能实现你的需求,另外,索引能加快速度。

因为这种同步的需求,首先,不是跨越服务器的,一般跨越服务器的,可以考虑用数据库同步(异步)、镜像(同步)、日志传送(异步)等技术。

而你现在是在同一台服务器上,要同步2个表的数据,所以用触发器是最合适的,而且触发器本身的特性是,在同一个事务中,只要你的数据插入成功,那么另一个表的数据,也就是同步成功了,同样的,如果插入失败,报错,那么另一个表的数据也不会同步成功。

再有,就是效率的问题,如果每次都sum求和,而你的表里是上亿的数据,这个sum肯定是非常耗时的,所以这里采用的是,你插入1条数据,那么只要把这个插入的数据,通过update 表 set c = c + 插入的值
那么自然就加快了速度,而且不会出现并发的问题。

如果还想进一步加快速度,那么可以考虑,给A表建立索引,因为a表肯定记录也不会少,而且肯定是通过where条件来定义某一条记录,然后update ,这个时候通过索引,就能更快的找到这条记录,然后update

#9


非常感谢yupeigu的热心帮助,按你的方法做的 效果不错, 结贴。。。。。

#1


这个就用触发器把,建一个 insert 触发器就可以

#2


忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧

#3


引用 2 楼 chengdudeyun 的回复:
忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧


还是得用触发器,每次插入数据的时候,只是把新插入的值累加到,a表的b字段,这样不久快了。

#4


引用 2 楼 chengdudeyun 的回复:
忘了说了 不用触发器 因为BB表是海量数据表 且不停的高频繁的在增加数据记录 如果用触发器效率和性能都跟不上吧


对了 BB表海量数据,有多少呢?

#5


另外,在表上建立相应的索引,也能加快处理的速度

#6


这个,个人觉得没什么用呀!B表在高频更新,求的sum肯定一直在变动,就算此刻你看到了一个sum值,但下一刻马上又变了,那这个数据能起到什么作用。。。

#7


数据有上亿  
取这个sum值肯定是有用的啊  数据是一个金额数据  需要不断获取这个数据的总金额
yupeigu的意思是建立索引和触发器?

#8


引用 7 楼 chengdudeyun 的回复:
数据有上亿  
取这个sum值肯定是有用的啊  数据是一个金额数据  需要不断获取这个数据的总金额
yupeigu的意思是建立索引和触发器?


对的,触发器能实现你的需求,另外,索引能加快速度。

因为这种同步的需求,首先,不是跨越服务器的,一般跨越服务器的,可以考虑用数据库同步(异步)、镜像(同步)、日志传送(异步)等技术。

而你现在是在同一台服务器上,要同步2个表的数据,所以用触发器是最合适的,而且触发器本身的特性是,在同一个事务中,只要你的数据插入成功,那么另一个表的数据,也就是同步成功了,同样的,如果插入失败,报错,那么另一个表的数据也不会同步成功。

再有,就是效率的问题,如果每次都sum求和,而你的表里是上亿的数据,这个sum肯定是非常耗时的,所以这里采用的是,你插入1条数据,那么只要把这个插入的数据,通过update 表 set c = c + 插入的值
那么自然就加快了速度,而且不会出现并发的问题。

如果还想进一步加快速度,那么可以考虑,给A表建立索引,因为a表肯定记录也不会少,而且肯定是通过where条件来定义某一条记录,然后update ,这个时候通过索引,就能更快的找到这条记录,然后update

#9


非常感谢yupeigu的热心帮助,按你的方法做的 效果不错, 结贴。。。。。