12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-29 09:50:17
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
假设前提:每天晚上10点到早上5点,每10分钟定时执行存储过程。实现方式:第一种是利用Mysql本身实现,制定event定时任务,可以借助Navicat For Mysql或其他数据库开发工具去做;第二种
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
假设前提:每天晚上10点到早上5点,每10分钟定时执行存储过程。
实现方式:
第一种是利用Mysql本身实现,制定event定时任务,可以借助Navicat For Mysql或其他数据库开发工具去做;
第二种实现方式是利用linux的定时任务,这个是利用Linux系统自带任务管理工具实现的。
一、Mysql中event定时任务的相关命令,
1.查看event是否启用:
SELECT@@event_scheduler;或SHOWVARIABLESLIKE'event%';
2.开启定时任务:
setGLOBALevent_scheduler=1;或SETGLOBALevent_scheduler=ON;
3.建立定时任务:
DROPEVENTIFEXISTSJOB_ALARM;CREATEEVENTJOB_ALARMONSCHEDULEEVERY10MINUTEDOBEGINif(date_format(current_time(),'%H')>22||date_format(current_time(),'%H')<5)THENCALLPRO_ALARM();ENDIF;END
4.建立存储过程:
DROPPROCEDUREIFEXISTSPRO_ALARM;CREATEPROCEDUREPRO_ALARM()BEGINDECLAREuserIdVARCHAR(32);#这个用于处理游标到达最后一行的情况DECLAREsINTDEFAULT0;#声明游标cursor_name(cursor_name是个多行结果集)DECLAREcursor_dataCURSORFORSELECTtmp.USER_IDFROM(SELECTe.USER_ID,MAX(e.TIME_GMT)TIME_GMTFROMEVENTSeGROUPBYe.USER_IDHAVINGMAX(e.TIME_GMT)<UNIX_TIMESTAMP()-60*30ANDMAX(e.TIME_GMT)>UNIX_TIMESTAMP()-60*60*24)tmpINNERJOINEVENTStONtmp.USER_ID=t.USER_IDANDtmp.TIME_GMT=t.TIME_GMTWHERETYPE_ID!='34001';#设置一个终止标记DECLARECONTINUEHANDLERFORSQLSTATE'02000'SETs=1;OPENcursor_data;#获取游标当前指针的记录,读取一行数据并传给变量a,bFETCHcursor_dataINTOuserId;#开始循环,判断是否游标已经到达了最后作为循环条件WHILEs<>1DOINSERTINTOEVENTS_NOTIFICATIONVALUES(NULL,SYSDATE(),UNIX_TIMESTAMP(SYSDATE()),UNIX_TIMESTAMP(SYSDATE()),'00000',userId,'1','0');#读取下一行的数据FETCHcursor_dataINTOuserId;ENDWHILE;#关闭游标CLOSEcursor_data;END;
二、利用linux的定时任务,
linux定时任务基本命令:
查看定时任务:crontab -l
编辑定时任务:crontab -e
*/10 22-23,0-5 * * * mysql -u用户名 -p密码 -e "use db_name;CALL PRO_ALARM();"
或者把use db_name;CALL PRO_ALARM();存到sql脚本中,编辑定时任务如下:
*/10 22-23,0-5 * * * mysql -u用户名 -p密码 < /application/Job_mysql.sql
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19