什么是存储过程
存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令.
- 存储过程是存储在数据库中的一组SQL语句
- 存储过程是mysql中定义的一个方法
- 可通过调用方法名来调用改方法
- 存储过程关联是一个数据库既一个Schema
存储过程的结构
DROP PROCEDURE IF EXISTS ${proceName};
DELIMITER //
CREATE PROCEDURE ${proceName}()
(
[${参数类型}] ${参数名} ${参数类型}
)
BEGIN
${proceBody}
END//
DELIMITER ;
#执行Proc() 存储过程
CALL ${proceName}();
如何使用
#定义一个简单的存储过程
# 先判断是否有Proc() 这个存储过程,有就drop掉
DROP 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();