MySQL存储过程与定时任务-介绍与实践

来源:互联网 发布:2016年11月网络 编辑:程序博客网 时间:2024/05/16 15:30

什么是存储过程

存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令.

  1. 存储过程是存储在数据库中的一组SQL语句
  2. 存储过程是mysql中定义的一个方法
  3. 可通过调用方法名来调用改方法
  4. 存储过程关联是一个数据库既一个Schema

存储过程的结构

DROP PROCEDURE IF EXISTS ${proceName}; DELIMITER //CREATE PROCEDURE ${proceName}() (   [${参数类型}] ${参数名} ${参数类型})   BEGIN  ${proceBody}END//DELIMITER ;#执行Proc() 存储过程CALL ${proceName}(); 

如何使用

#定义一个简单的存储过程# 先判断是否有Proc() 这个存储过程,有就dropDROP PROCEDURE IF EXISTS Proc; # 创建Proc() 存储过程/* 方法说明-- @author: ${作者}-- @date  : ${时间}-- @param : int - ${参数名}  - 参数说明-- @return: 具体信息*/DELIMITER //CREATE PROCEDURE Proc() BEGIN  SELECT * FROM user;END//DELIMITER ;#执行Proc() 存储过程CALL Proc(); 

注意:“DELIMITER //”语句的作用是将MYSQL的结束符设置为//,因为MYSQL默认的语句结束符为分号;,为了避免与存储过程
中SQL语句结束符相冲突,需要使用DELIMITER 改变存储过程的结束符,并以“END//”结束存储过程。
存储过程定义完毕之后再使用DELIMITER ;恢复默认结束符。DELIMITER 也可以指定其他符号为结束符!!!!!!!!!!!

存储过程的管理

# 查看所有 存储过程 信息show procedure status;# 删除存储过程drop procedure ${procedureName};# 查看存储过程的内容信息show create procedure ${procedureName};

定时任务的管理

# 定时任务是否开启SHOW VARIABLES LIKE '%event_sche%';# 开启定时任务(开机有效)# 修改配置文件/etc/my.confevent_scheduler=ON# 开启定时任务(重启失效)SET GLOBAL event_scheduler = 1;# 关闭定时任务(重启失效)SET GLOBAL event_scheduler = 0;# 查看所有定时任务信息SHOW EVENTS ;# 定时任务结构# 创建定时任务(示例)CERATE EVENT IF NOT EXISTS ${eventName} ON SCHEDULE every 30 second  #每30秒执行一次ON COMPLETION PRESERVE  #定时任务完成后,even被设为disable,如果加PRESERVE前加not就会被删除DO CALL ${procedureName}(); # 启动某个定时任务ALTER EVENT ${evenName} ENABLE;    # 关闭某个定时任务ALTER EVENT ${evenName} DISABLE;  # 删除定时任务DROP EVENT IF EXISTS ${evenName};

简单示例

每到星期一执行一次存储过程

# 存储过程(判断今天是不是星期一)DELIMITER //CREATE PROCEDURE p_clear_author_rank_integral()BEGIN  DECLARE weed_index INT DEFAULT 0;  SET weed_index = dayofweek(now());  IF weed_index=2 THEN       update user set rank_integral=0 where author.id!=0;  END IF;END//DELIMITER ;#定时任务(每天执行)CERATE EVENT IF NOT EXISTS e_clear_author_rank_integralON SCHEDULE every 1 DAYON COMPLETION PRESERVEDO CALL p_clear_author_rank_integral();
原创粉丝点击