扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
mysql定时任务
10年积累的网站建设、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有雅安免费网站建设让你可以放心的选择与我们合作。
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
如:每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
create event if not exists e_test
on schedule every 30 second
on completion preserve
do call test();
2. windows、linux 的定时任务 这个就不举例了,通过脚本定时去调用mysql执行
有二种方法:
1用MYSQL的存取过程:
具体步骤如下:
一、开启事件
查看event_scheduler状态
show variables like '%sche%';
修改event_schedule状态
set global event_scheduler=1;
(这部分出自)
二、创建事件
CREATE EVENT `NewEvent`
ON SCHEDULE EVERY 1 DAY STARTS '2010-11-16 06:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
update serialnumber set value=0
这样serialnumber 表value字段将每天早6点被清零
三、事件调用存储过程
创建存储过程
create PROCEDURE NewProcTest()
begin
update serialnumber set value=0;
end;
查看存储过程
show procedure status;
创建事件
CREATE EVENT `NewEvent`
ON SCHEDULE EVERY 1 DAY STARTS '2010-11-16 06:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
call NewProcTest()
第二种方法:
直接用PHP调用某公共代码,判断时间和是否更新过,然后做相应的处理!
给你个思路:
1、建一个php文件,文件里面写需要更新数据库的代码。
2、给服务器建立定时任务,liunx的话需要命令开启任务,详情都能网上搜。windows的话可以建立一个任务计划程序(开始菜单可以搜索),里面设置好启动时间及要通过php程序运行的php文件,详情也可以网上搜索出来。
3、另外附上一段php执行文件(也就是用此段代码执行你的数据库操作php文件)
?php
/**
* 定时计划任务
*/
$option = '';//附加参数
$header = '';//请求头
$type = 'GET';//请求类型
$url = '......';//请求地址
$curl = curl_init (); // 启动一个CURL会话
curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); // 对认证证书来源的检查
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); // 从证书中检查SSL加密算法是否存在
curl_setopt ( $curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
if (! empty ( $option )) {
$option = json_encode ( $option );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $option ); // Post提交的数据包
}
curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 设置超时限制防止死循环
//设置请求头
if($header){
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
curl_setopt ( $curl, CURLOPT_CUSTOMREQUEST, $type );
$result = curl_exec ( $curl ); // 执行操作
curl_close ( $curl ); // 关闭CURL会话
参考方法:
delete from 表名;
truncate table 表名;
不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。
delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。
你这个不应该问"php可以做到吗?",而该问"数据库能做到吗?"
用管理员登录重置或者用户登录时判断日期后用php操作数据库重置.如果想通过php,不需要任何登录执行的话,那考虑的是怎么在不登录情况下把日期传过去.最终还是php操作,不是数据库自动进行.综上,php不能做到.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流