mysql定时任务


  1. -- 数据库中表的信息查询  
  2. ##SELECT TABLE_NAME,TABLE_ROWS, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'bdata'  ORDER BY TABLE_ROWS DESC  
  3. ##select count(*) from (SELECT TABLE_NAME,TABLE_ROWS, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'bdata'  ORDER BY TABLE_ROWS DESC) as temp;  
  4. /*  
  5. DELIMITER $$  
  6. drop procedure if exists deleteTables $$  
  7. --   
  8. -- 实例  
  9. -- 存储过程名为:delateTables  
  10. -- 参数:没有参数  
  11. --  
  12. create procedure deleteTables ()  
  13. begin  
  14. declare tablename varchar(255); -- 待删除的表的名称  
  15. declare done int default false;-- 遍历数据结束标志  
  16. declare continue handler for not found set done = true;   -- 将结束标志绑定到游标  
  17. declare rs cursor for select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'bdata' and TABLE_ROWS<100; -- 声明游标来实现遍历记录  
  18. open rs; -- 打开游标  
  19.   
  20. -- 开始循环  
  21. read_loop: LOOP  
  22.    -- 提取游标里的数据,这里只有一个,多个的话也一样;  
  23.     FETCH cur INTO a;  
  24.     SELECT a;  
  25.   
  26.     -- 声明结束的时候  
  27.     IF done THEN  
  28.       LEAVE read_loop;  
  29.     END IF;  
  30.     -- 这里做你想做的循环的事件     
  31.   
  32.   END LOOP ;  
  33.   -- 关闭游标  
  34.   CLOSE cur;  
  35.   
  36.   
  37.   
  38. end $$  
  39. DELIMITER ;  
  40.   
  41. call deleteTables;  
  42.   
  43. */  
  44. delimiter $$  
  45. DROP PROCEDURE IF EXISTS deletetables $$   
  46. --   
  47. -- 实例   
  48. -- 存储过程名为:delateTables   
  49. -- 参数:没有参数   
  50. --   
  51. CREATE PROCEDURE deletetables ()   
  52. BEGIN   
  53.   DECLARE tablename VARCHAR(255);     -- 待删除的表的名称   
  54.   DECLARE done INT DEFAULT FALSE;-- 遍历数据结束标志   
  55.    
  56.   DECLARE cur CURSOR FOR SELECT table_name FROM   information_schema.tables  WHERE  table_schema = 'bdata' AND table_rows<100; -- 声明游标来实现遍历记录  
  57.   
  58.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 将结束标志绑定到游标    
  59.   OPEN cur;   -- 打开游标   
  60.   
  61. -- 下面是利用游标执行循环的部分  
  62.   -- 开始循环   
  63.   READ_LOOP: LOOP   
  64.       -- 提取游标里的tb_myisam数据,这里只有一个,多个的话也一样;   
  65.       FETCH cur INTO  tablename;      
  66.       -- DROP TABLE tablename;   
  67.       -- 声明结束的时候   
  68.       IF done THEN  
  69.         LEAVE READ_LOOP;   
  70.       END IF;   
  71.       -- 一些敏感操作  
  72.        
  73.       SELECT tablename;   
  74.   
  75.       SET @sqlstr=concat("drop table ", tablename);    
  76.       prepare stmt from @sqlstr;    
  77.       EXECUTE stmt;             
  78.       deallocate prepare stmt;   
  79.    END LOOP ;   
  80.    -- 关闭游标  
  81.    CLOSE cur;  
  82. END $$   
  83. delimiter ;  
  84. -- CALL deletetables;  
  85.   
  86. create event if not exists event_deletetables_rowslessthan100    
  87. on schedule every 1 day  
  88. on completion preserve    
  89. do call deletetables();  

2. 事件查看

 

 

[sql]  view plain  copy
 
  1. #查看是否开启事件  
  2. show variables like '%sche%';   
  3.   
  4. ##开启事件   
  5. set global event_scheduler = 1;  
  6.   
  7. /*  
  8.   
  9. create event if not exists e_deletetables_rowsless100    
  10. on schedule every 1 day    
  11. on completion preserve    
  12. do call deletetables();  
  13. */  
  14.   
  15.   
  16.   
  17. ##注意分隔符的使用  
  18. /*  
  19. DELIMITER $$  
  20. CREATE PROCEDURE test ()  
  21. begin  
  22. update student set name = now() where NO = '2012001';  
  23. end $$  
  24. DELIMITER ;  
  25. */  
  26. ##创建事件  
  27. /*  
  28. create event if not exists e_test    
  29. on schedule every 5 second    
  30. on completion preserve    
  31. do call test();  
  32.   
  33. */  
  34. ##关闭事件任务  定时任务  
  35. #alter event e_test ON COMPLETION PRESERVE DISABLE;  
  36. ##开启事件任务  
  37. #alter event e_test ON COMPLETION PRESERVE ENABLE;   

3. 定时任务测试

 

 

[sql]  view plain  copy
 
  1. ##查看是否开启事件  
  2. show variables like '%sche%';   
  3.   
  4. ##开启事件   
  5. set global event_scheduler = 1;  
  6.   
  7. ##注意分隔符的使用  
  8. /*  
  9. DELIMITER $$  
  10. CREATE PROCEDURE test ()  
  11. begin  
  12. update student set name = now() where NO = '2012001';  
  13. end $$  
  14. DELIMITER ;  
  15. */  
  16. ##创建事件  
  17. /*  
  18. create event if not exists e_test    
  19. on schedule every 5 second    
  20. on completion preserve    
  21. do call test();  
  22.   
  23. */  
  24. ##关闭事件任务  定时任务  
  25. #alter event e_test ON COMPLETION PRESERVE DISABLE;  
  26. ##开户事件任务  
  27. #alter event e_test ON COMPLETION PRESERVE ENABLE;   
  28.   
  29. #select table_name from information_schema.tables where table_schema='bdatadd'  
  30.   
  31. #select TABLE_NAME from (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'bdata' and TABLE_ROWS<100) as temp limit 0,1;  
  32. /*  
  33. DELIMITER $$  
  34.   
  35. #drop procedure if exists new_procedure $$  
  36.   
  37. CREATE PROCEDURE `bdata`.`new_procedure` ()  
  38. BEGIN  
  39. -- 需要定义接收游标数据的变量   
  40.   DECLARE a VARCHAR(255);  
  41.     
  42.   -- 遍历数据结束标志  
  43.   DECLARE done INT DEFAULT FALSE;  
  44.    
  45.   
  46.    -- 游标  
  47.   DECLARE cur CURSOR FOR SELECT name FROM bdata.student;  
  48.  -- 将结束标志绑定到游标  
  49.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  
  50.     
  51.   -- 打开游标  
  52.   OPEN cur;  
  53.     
  54.   -- 开始循环  
  55.   read_loop: LOOP  
  56.     -- 提取游标里的数据,这里只有一个,多个的话也一样;  
  57.     FETCH cur INTO a;  
  58.     SELECT a;  
  59.   
  60.     -- 声明结束的时候  
  61.     IF done THEN  
  62.       LEAVE read_loop;  
  63.     END IF;  
  64.     -- 这里做你想做的循环的事件     
  65.   
  66.   END LOOP ;  
  67.   -- 关闭游标  
  68.   CLOSE cur;  
  69.   
  70. END $$  
  71. DELIMITER ;  
  72.   
  73. call new_procedure;  
  74. */  
4. 查看表

 

 

[sql]  view plain  copy
 
  1. #show tables like 'mkk_data_%';  
  2. #use ptimpdb;  
  3. #select table_name,table_rows from information_schema.columns where table_schema = "ptimpdb" and table_name like'mkk_data_%' ORDER BY TABLE_ROWS DESC;  
  4. #select table_name from information_schema.columns where table_schema = "ptimpdb" and table_name like'mkk_data_%'group by table_name;  
  5. #select count(*) as res from  (select table_name from information_schema.columns where table_schema = "pdb" and table_name like'mkk_data_%'group by table_name)  
  6. #select count(*) as res from mkk_data_10  
  7.   
  8. ##数据库查询表的结果  
  9. #SELECT TABLE_NAME,TABLE_ROWS, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'pdb' AND TABLE_NAME LIKE'mkk_data_%' AND  TABLE_ROWS < 100 ORDER BY TABLE_ROWS DESC;  
  10.   
  11.   
  12. #SELECT TABLE_NAME,TABLE_ROWS, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'pdb' AND TABLE_NAME LIKE'mkk_data_%' AND  TABLE_ROWS < 100 ORDER BY TABLE_ROWS DESC;  
  13.   
  14.   
  15. delimiter $$  
  16. DROP PROCEDURE IF EXISTS deletetables $$   
  17. --   
  18. -- 实例   
  19. -- 存储过程名为:delateTables   
  20. -- 参数:没有参数 deletetables  
  21. --   
  22. CREATE PROCEDURE deletetables ()   
  23. BEGIN   
  24.   DECLARE tablename VARCHAR(255);     -- 待删除的表的名称   
  25.   DECLARE done INT DEFAULT FALSE;-- 遍历数据结束标志   
  26.    
  27.   DECLARE cur CURSOR FOR SELECT table_name FROM   information_schema.tables  WHERE  table_schema = 'pdb' AND table_rows<100; -- 声明游标来实现遍历记录  
  28.   
  29.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 将结束标志绑定到游标    
  30.   OPEN cur;   -- 打开游标   
  31.   
  32. -- 下面是利用游标执行循环的部分  
  33.   -- 开始循环   
  34.   READ_LOOP: LOOP   
  35.       -- 提取游标里的tb_myisam数据,这里只有一个,多个的话也一样;   
  36.       FETCH cur INTO  tablename;      
  37.       -- DROP TABLE tablename;   
  38.       -- 声明结束的时候   
  39.       IF done THEN  
  40.         LEAVE READ_LOOP;   
  41.       END IF;   
  42.       -- 一些敏感操作  
  43.        
  44.       SELECT tablename;   
  45.   
  46. /*    ## 动态sql语句的构建  
  47.       SET @sqlstr=concat("drop table ", tablename);    
  48.       prepare stmt from @sqlstr;    
  49.       EXECUTE stmt;             
  50.       ddeletetableseallocate prepare stmt;   
  51. */  
  52.         
  53.    END LOOP ;   
  54.    -- 关闭游标  
  55.    CLOSE cur;  
  56. END $$   
  57. delimiter ;  
  58.   
  59.   
  60.   
  61.   
  62. -- CALL deletetables;  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM