MySQL工作笔记-使用事件和存储过程定时更新某表数据

时间:2024-03-16 16:38:42

目录

 

 

基本概念

演示及源码


 

基本概念

因为要看某展示软件的效果,上午用了Qt实时对表进行更新操作!

这是非常low的表现。其中的一个原因就是效率问题!

 

Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据

https://blog.csdn.net/qq78442761/article/details/88592455

 

这里可以使用存储过程,对表进行批量更新!

然后再用事件,设置一个每秒刷新,是不是感觉很爽歪歪!

 

下面给出使用存储过程的优势!

                   1.可增强SQL语言的功能和灵活性

                   2.良好的封装性

                   3.高性能

                   4.可减少网络流量

                   5.存储过程可以作为一种安全机制来确保数据库的安全性和数据的完整性

【回忆这个,还是我大二的时候考计算机二级mysql学过的,如今终于在项目中用到了,不容易啊,看来大学里面的东西还是很有用的,只是没有项目进行实践,而工程学科,实践>理论】

 

演示及源码

有如下两个表:

MySQL工作笔记-使用事件和存储过程定时更新某表数据

两张表结构分别如下:

MySQL工作笔记-使用事件和存储过程定时更新某表数据

目前表中存在的数据有!

MySQL工作笔记-使用事件和存储过程定时更新某表数据

现在来写一个存储过程,实现输入一个id,对2张表中指定id进行更新!

delimiter $$
create procedure spUpdateValue(in cid int)
begin
update datasample set value=RAND()*99999 where idval=cid;
update circle set isRun=RAND()*1 where id=cid;
end $$
delimiter ;

运行截图如下:

MySQL工作笔记-使用事件和存储过程定时更新某表数据

调用下看看,然后在看看数据变了没!

MySQL工作笔记-使用事件和存储过程定时更新某表数据

从这里可以发现的确是更新了,现在修改下存储过程,实现批量更新!

这里只要把限定符去掉就可以了!

delimiter $$
create procedure spUpdateValue()
begin
update datasample set value=RAND()*99999;
update circle set isRun=RAND()*1;
end $$
delimiter ;

运行截图如下:

MySQL工作笔记-使用事件和存储过程定时更新某表数据

这里现在来写一个事件,让其每秒调用一次存储过程!

create event updateEvent
on schedule every 1 second
on completion PRESERVE
do call spUpdateValue;

MySQL工作笔记-使用事件和存储过程定时更新某表数据


当为on completion preserve 的时候,当event到期了,event会被disable,但是该event还是会存在
当为on completion not preserve的时候,当event到期的时候,该event会被自动删除掉.。

 

这里要注意,mysql默认是不会开启事件,需要输入

set global event_scheduler=on;

开启事件!

运行截图如下:

MySQL工作笔记-使用事件和存储过程定时更新某表数据

MySQL工作笔记-使用事件和存储过程定时更新某表数据

MySQL工作笔记-使用事件和存储过程定时更新某表数据