首页 > 数据库 >mysql event 实例

mysql event 实例

时间:2023-01-10 12:04:37浏览次数:33  
标签:id source 实例 mysql table proc event select


今天一网友求助,每天早上8点自动将A表中的10条数据插入B表,然后在A表中删除那10条数据。

现测试功能:  有table_a和table_b表,每30秒table_a有2条数据插入到table_b表,然后删除table_a表的那2条数据;

创建event时,我的mysql是5.0的,总是报错。'event_scheduler'也是未知变量


在网上看看知道,MySQL是从5.1开始支持event功能。我换了个mysql5.5版本的实现成功了。



1.创建测试表

create table table_a  
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25) NOT NULL
)


create table table_b as select * from table_a where 1<>1;




2.插入数据到table_a(不断执行下面这条代码)

insert into table_a(name) values(now());




3.创建存储过程(设定执行符为双斜杠“//”,因为内部分号会执行。最后重设回分号)

DELIMITER //  
CREATE PROCEDURE proc()
begin
insert into table_b select * from table_a limit 2;
delete from table_a where id in(select id from table_b);
end
//
DELIMITER ;




4.开启定时器

show variables like 'event_scheduler';  --查看是否开启定时器  
set global event_scheduler on; --开启定时器
set global event_scheduler=1; --开启定时器



5.创建每30秒钟调用过程proc()的事件

DELIMITER //  
CREATE EVENT event_test
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL proc();
//
DELIMITER ;



select * from table_a; --30秒左右查看一下数据,看是否变化
select * from table_b; --30秒左右查看一下数据,看是否变化




6.附加

ALTER EVENT testEvent ON  COMPLETION PRESERVE ENABLE;  -- 开启事件ENABLE/DISABLE  
select name,body from mysql.proc where db='test' and type='PROCEDURE';
show procedure status;
show create procedure proc;


drop event event_test;
drop procedure proc;



每天早上8点自动将A表中的10条数据插入B表,然后在A表中删除那10条数据。代码

CREATE PROCEDURE proc()  
begin
insert into table_b select * from table_a limit 10;
delete from table_a where id in(select id from table_b);
end
CREATE EVENT myevent
ON SCHEDULE EVERY 1 DAY
STARTS date_add(date(curdate() + 1),interval 8 hour)
ON COMPLETION PRESERVE
DO CALL proc();



从A 表中导数据的主要核心就是把A表中Mobile这列数据到B表中,A表(all_source)就是总表,B表 (today _source)就是当天表,每天导数据到B表中,然后把这些数据分配给我们公司的每个话务员,作为他们打电话的资源,每个人每天大概要打350个电话,假如说今天公司一共有500个话务员,那就要导350*500条数据,那明天公司有可能就变成502个人或者490人(每天都有人入职或离职),这时候就要执行350*502条数据或350*490条数据.而user表就是话务员表,表中人数就决定了每天导数据的条数(350*人数).如果每天有人没打完电话,每天都给大家重新分配同样的电话量。

CREATE PROCEDURE proc()  
BEGIN
declare personCount int;
declare noCallCount int;
declare oneDayCount int;
declare limitCount int;
declare oneid int;
declare cur CURSOR FOR SELECT user_id FROM users;
set oneDayCount=350;
select count(*) into personCount from users;
select count(*) into noCallCount from today_source;
set limitCount=personCount*oneDayCount-noCallCount;
insert into today_source select * from all_source limit limitCount;
delete from all_source where exists(select 'X' from today_source where all_source.id=today_source.id);
update today_source set user_id=0;
OPEN cur;
FETCH cur INTO oneid;
WHILE ( oneid is not null) DO
UPDATE today_source SET user_id=oneid WHERE user_id=0 limit oneDayCount;
FETCH cur INTO oneid;
END WHILE;
CLOSE cur;
END
//
DELIMITER ;

标签:id,source,实例,mysql,table,proc,event,select
From: https://blog.51cto.com/hzc2012/6000173

相关文章

  • docker安装mysql
    搜索镜像名字dockersearchmysql 在网页端搜索版本列表:https://hub.docker.com/  点击标题,在下面选出需要的版本号拉取镜像 dockerpullmysql:8.0 ......
  • 关于replace(): MySQL批量替换指定字段字符串
    UPDATEtb1SETf1=REPLACE(str,from_str,to_str) 在字符串 str中所有出现的字符串from_str均被to_str替换,然后返回这个字符串 实例:updatebase_giftsetimg_ur......
  • mysql8.0特性管理相关
    转自:https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5OTY2MjU5MQ==&action=getalbum&album_id=2435603183193505795&scene=173&from_msgid=2247491832&from_itemidx=1&......
  • mysql COALESCE函数
    COALESCE(value,…)是一个可变参函数,可以使用多个参数。作用:接受多个参数,返回第一个不为NULL的参数,如果所有参数都为NULL,此函数返回NULL;当它使用2个参数时,和IFNULL函数作用......
  • 完全卸载MySQL服务的方法
    1.重新运行安装文件,单击remove移除mysql。此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹。2.如果MySQL服务没有移除的话,以管理员方式运行cmd命令:sc......
  • mysql 触发器
    BEGINSETnew.nodeId=(SELECTIF(ISNULL(id),1,id+1)FROM(SELECTMAX(id)ASidFROMfunction)tmp);END 自己写的触发器BEGINSETnew.sort_index=(SELECTIF(ISN......
  • MySQL必知必会第四章-检索数据
    检索数据SELECT语句SELECT语句用途是从一个或多个表中检索信息。为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。检索单个列利用SEL......
  • MySQL必知必会第三章-使用MySQL
    使用MySQL链接为了链接MySQL需要以下信息:主机名(计算机名)——如果连接到本地MySQL服务器,为localhost;端口(如果使用默认端口3306之外的端口);一个合法的用户名;用户口令(如......
  • mysql 安装部署(Docker - Centos7)
    mysql安装部署(Docker-Centos7) 1.下载镜像                    参考:https://blog.csdn.net/weixin_43830765/article/det......
  • MySQL25 - 三范式
    数据库三范式数据库中表的设计依据第一范式要求任何一张表必须有主键,每一个字段原子性不可再分必须有唯一非空列作为主键比如邮箱和手机号不能存储在一列中,应该分为......