+ -
当前位置:首页 → 问答吧 → 关于定时执行的存储过程应该怎么写!急用谢谢大虾 在线等待

关于定时执行的存储过程应该怎么写!急用谢谢大虾 在线等待

时间:2011-09-28

来源:互联网

两个表
1 vhinfo表
  id name status 
  1 奔驰 Y
2 vhmaintain
  id infoid stardate 
  1 1 2011-09-28 08:58:22
如果当前时间等于表2的stardate字段的时间name就把表1的status字段改为N。
这个存储过程应该怎么写 。急用 谢谢各位大虾

作者: yuanCSDN   发布时间: 2011-09-28

try:
SET GLOBAL event_scheduler = 1;
CREATE EVENT e_totals ON SCHEDULE AT '2011-09-27 120:00:00'
DO call dd();

DROP PROCEDURE IF EXISTS `dd`$$

CREATE PROCEDURE `dd`()
BEGIN
SELECT 1 INTO @aa FROM 表2 WHERE TIME(stardate)=TIME(NOW());
IF @aa=1 THEN
UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N';
END IF;
END$$

DELIMITER ;

作者: WWWWA   发布时间: 2011-09-28

or
DELIMITER $$

create EVENT `e` ON SCHEDULE EVERY 1 SECOND STARTS '2011-09-28 11:32:24' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
SELECT 1 INTO @aa FROM 表2 WHERE TIME(stardate)=TIME(NOW());
IF @aa=1 THEN
UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N';
END IF;
END$$

DELIMITER ;

作者: WWWWA   发布时间: 2011-09-28

or
DELIMITER $$

create EVENT `e` ON SCHEDULE EVERY 1 SECOND STARTS '2011-09-28 11:32:24' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N' WHERE TIME(stardate)=TIME(NOW()) ;
END$$

DELIMITER ;

作者: WWWWA   发布时间: 2011-09-28

引用 3 楼 wwwwa 的回复:

or
DELIMITER $$

create EVENT `e` ON SCHEDULE EVERY 1 SECOND STARTS '2011-09-28 11:32:24' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N' WHER……


SQL code
-- 顶,还需要注意一点:你数据库的事件定时执行功能是否已开启 ?
-- 用下面的方法查看:
-- 要使定时起作用 MySQL的常量GLOBAL event_scheduler必须为on或者是1

-- 查看是否开启定时器
SHOW VARIABLES LIKE '%sche%'; 

-- 开启定时器 0:off 1:on
SET GLOBAL event_scheduler = ON;  

-- 开启事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE ENABLE;  

-- 关闭事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE DISABLE;


-- MySQL 查看EVENT 相关信息:
SELECT * FROM information_schema.EVENTS;


select `name` from mysql.proc where db = 'groupon' and `type` = 'PROCEDURE';

作者: luoyoumou   发布时间: 2011-09-28

也可以写好存储过程 放到crontab里执行




作者: rucypli   发布时间: 2011-09-28

引用 1 楼 wwwwa 的回复:
try:
SET GLOBAL event_scheduler = 1;
CREATE EVENT e_totals ON SCHEDULE AT '2011-09-27 120:00:00'
DO call dd();

DROP PROCEDURE IF EXISTS `dd`$$

CREATE PROCEDURE `dd`()
BEGIN
SELECT 1 INTO @a……

谢谢你大哥或者大姐。麻烦你能加加注释吗。我是菜鸟

作者: yuanCSDN   发布时间: 2011-09-28


UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N' WHERE TIME(stardate)=TIME(NOW()) ;
简单一些

作者: wwwwb   发布时间: 2011-09-28

不建议在事件中做这个动作,因为你根本无法保证now()= stardate ,这个运行的时刻是由MYSQL而定的,并不保证一定会在每秒的这个时候运行。


如果你只是想在界面上显示,status 为N,则可以直接通过查询或者视图实现。
SQL code

select vhinfo.id,vhinfo.name,if(vhmaintain.stardate>=now(),'N','Y') as status  
from vhinfo inner join vhmaintain on vhinfo.id=vhmaintain.infoid

作者: ACMAIN_CHM   发布时间: 2011-09-28

相关阅读 更多

热门下载

更多