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;  
posted @ 2018-01-22 14:23  Bestone  阅读(3391)  评论(0编辑  收藏  举报