mysql如何定时更新某张表数据到另一张表?

公司最近要上线一个活动促销功能,当用户消费时查看这个用户是不是已经在之前购买过2次,如果已经购买过2次就要给它相对应的折扣。但是麻烦的是用户购买记录表里面因为数据很多,包括了用户购买成不成功的数据,导致如果每次都从里面查的话性能影响很大。
所以现在我们想这样做,就是直接弄个定时器,定时一天4次更新一次用户购买记录表的数据到一张表匹配出按用户分组来查看购买成功的次数,从而每次都从这张购买成功的表里面查就可以了。

关键是:我们是linux服务器,mysql数据库该如何实现这个定时更新一个数据库的表数据到另一张表的功能呢?谢谢了。

慕沐林林
浏览 1427回答 7
7回答

狐的传说

你如果用定时器就搜一个定时任务的库,然后当个服务专门用来跑这个东西。1.数据库单独出来,同步主要的数据库。然后定时查询,定时修改,再同步回去。这个同步可以直接改主数据库。2.可以使用异步消息模式,每当有新的购买记录的时候就通知另外一个服务启动,将用户的数据更新一次,这个可以使用rabbitmq之类的3.可以使用数据库的触发器,每当有新的记录产生的时候就执行一次sql语句,里面就有更新判断等 以上随便都可以实现

繁花如伊

你这个“之前购买过2次”是指活动前么,还是活动进行时也是有效的(因为如果是限定活动之前,也就没有同步的必要了),如果活动时也是可以叠加这两次, 那: 所以现在我们想这样做,就是直接弄个定时器,定时一天4次更新一次用户购买记录表的数据到一张表匹配出按用户分组来查看购买成功的次数,从而每次都从这张购买成功的表里面查就可以了。 你这个设计,一个更新4次,如果数据还没更新过来,用户就下单了,这时候购买成功这张表里数据还没同步过来,怎么办?这个活动是不是就出问题了。 可以在活动要开始的时候,暂时锁表,初始化一张临时表,记录用户购买成功的次数;然后只需要查询这张表中的数据来判断是否符合要求;购买成功顺便更新这张表。进一步提升性能,可以存储在redis中,直接捞redis,没有时查这个表。有点类似一个排行榜。

郎朗坤

在用户表(或者别的表)增加字段:billing_count,记录购买次数(方便以后有别的活动,可以再增加个“总消费金额”字段)。 每成功购买一次,该值就+1。活动的时候,就判断这个值就可以了。

湖上湖

1.在业务逻辑层写定时任务,每天定时执行同步数据库。2.用kettle创建定时作业同步更新数据库

杨魅力

写个接口,进行更新记录数据的操作。然后定时调用就好

慕尼黑5688855

建议直接写mysql存储过程,使用mysql定时器触发

婷婷同学_

存储过程+定时器的+1
打开App,查看更多内容
随时随地看视频慕课网APP