MySQL 存储过程和定时器的应用

SQL语言首先是一门编程语言,其次才是查询语言,它可以通过存储过程来实现复杂的数据操作。
有一个计划任务的需求,仅单纯的对数据库进行操作,例如,定期删除读过的日志,有两种途径可以考虑:

使用MySQL的存储过程和定时器更直接

首先创建数据表

CREATE TABLE `test`.`log` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `msg` VARCHAR(255) NULL,
  `isread` TINYINT(3) NOT NULL DEFAULT 0 COMMENT '0 未读 1 已读',
  PRIMARY KEY (`id`));

insert些数据[此处自带循环执行特效]

insert into log values(null,'',1);

创建存储过程

DROP procedure IF EXISTS `cleardata`;

DELIMITER $$
CREATE PROCEDURE `cleardata` (IN $tname varchar(50), IN $fieldname varchar(50), IN $wheresql varchar(255))
BEGIN
	set @sqlcmd = concat("DELETE FROM ", $tname, " WHERE ", $fieldname, $wheresql, " limit 1");
    prepare stmt from @sqlcmd;
    execute stmt;
    DEALLOCATE PREPARE STMT;
END
$$

DELIMITER ;

调用下看是否能成功执行

mysql> call test.cleardata('log', 'isread', '=1');

基于此,创建一个事件:

set global event_scheduler=1;
create event if not exists event_log on schedule
every 3 second
on completion preserve
do call test.cleardata('log', 'isread', '=1')

每三秒钟执行一次删除操作
如果要停止事件

alter event event_log on completion preserve disable;

event 就是JOB,即事件调度,表示定期执行某个操作。事件一旦创建就会立即执行。
对于更精确的需求,单纯依靠php脚本不能保精确定时执行,效率也不够好。其实存储过程主要用于队列服务。在用MySQL模拟队列时就会用到存储过程、定时器等工具。而这在sns、微博等应用中很常见,也是最简单的方式。
缺点就是不如Oracle强大。但是免费啊,所以也算强大了。

使用php常驻内存或定期执行的方法实现[不是此文重点]

  • PHP在cli模式下是不限时的 可以用来做计划任务
  • 网页请求的话需要修改最大执行时间,就能无限执行下去;
    ignore_user_abort(true) 保证用户关闭网页后程序还可以在后台执行
ignore_user_abort(true);
set_time_limit(0);
//code
  • UNIX系统使用crontab实现

TIP

对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理。

http://www.jb51.net/article/38319.htm MySQL创建事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值