[MySQL]定时把某一列值赋值给另一列

前言

在做项目的时候需要根据用户的积分做一个排名和排名趋势(上升、下降或持平),首先,从排名趋势上分析,我的想法是,今天的排名(ranking)和昨天排名(oldranking)进行对比,然后给出趋势是上升还是下降。

这个时候还需要一个定时器,每天按时自动根据积分多少进行排名,在排名之前需要把排名(ranking)的值赋值给旧排名(oldranking)字段。

然后对比这两个字段的排名,就可以知道排名趋势(本篇主要解决定时自动赋值)。

正文

赋值

要解决定时自动赋值,需要用到MySQL的函数(存储过程)和事件(定时器)。

首先测试赋值代码(测试字段直接用的拼音paiming,请谅解)

UPDATE t_user SET  oldpaiming = paiming;

提示已更新成功

                       


表中已赋值成功



可以看到代码没有问题,然后,把赋值的sql代码写到函数中

BEGIN
    UPDATE t_user SET  oldpaiming = paiming;
END

给次函数命名为test


    

    在保存函数的时候出了个小小的错误:

    

    解决方案:

    

    把开头的CREATE TRIGGER去掉,直接从BEGIN开始就可以了,原因:不详。

定时器

那么,这个时候主要就是解决定时器问题了。

1. 首先,查看MySQL event功能是否开启,OFF或者0表示关闭:show VARIABLES LIKE '%sche%'



2. 如果event是关闭的,则需要开启event功能:

    将事件计划开启:SET GLOBAL event_scheduler = 1;

    将事件计划关闭:SET GLOBAL event_scheduler = 0;

    

    由于我的是已开启状态,所以,受影响行数是0

    拓展

关闭事件任务:ALTER EVENTeventName ON COMPLETION PRESERVE DISABLE

开启事件任务:ALTER EVENTeventName ON COMPLETION PRESERVE ENABLE

 

查看时间任务:SHOW EVENTS

3. 创建事件

    代码:每30s执行一次函数test();

CREATE EVENT IF NOT EXISTS e_test
    ON SCHEDULE EVERY 30 SECOND  
    ON COMPLETION PRESERVE
do call test();


在事件的计划中,有可视化方式可以更改开始时间和执行间隔时间。但是创建事件的代码不会变,依然显示创建时设置的30s,不过没有影响。甚至创建的查询代码可以直接删除。

   


总结

主要难点在于定时器的使用,之前没有用过,不过还是很好的解决了,感谢帮助我的师父查阅的一些资料作者。

猜你喜欢

转载自blog.csdn.net/vop444/article/details/80177091