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

什么是存储过程

存储例程是存储在数据库服务器中的一组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.conf
event_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_integral
ON SCHEDULE every 1 DAY
ON COMPLETION PRESERVE
DO CALL p_clear_author_rank_integral();

猜你喜欢

转载自blog.csdn.net/csdn2193714269/article/details/78710860
今日推荐