MySQL事件、存储过程、函数等创建方法

一、MySQL 中,可以通过 CREATE EVENT 语句创建定时任务(事件)。以下是详细的创建方法和示例:

基本语法:

CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
DO
   {sql_statement | statement_list | BEGIN ... END};

关键参数说明​

  1. ON SCHEDULE
    定义事件的执行时间规则,支持以下格式:

    • ​单次执行​​:AT timestamp(指定具体时间)
    • ​重复执行​​:EVERY interval_value interval_unit(如 EVERY 1 DAY
  2. ON COMPLETION
    控制事件执行后的行为:

    • PRESERVE(默认):保留事件定义,可修改或删除。
    • NOT PRESERVE:事件执行后自动删除。
  3. COMMENT
    为事件添加注释(可选)。

  4. DO 后的内容​
    要执行的 SQL 语句或存储过程。

示例 1:创建一个每天凌晨备份数据的事件​ 

CREATE EVENT daily_backup
ON SCHEDULE EVERY 1 DAY
STARTS '2023-10-01 02:00:00'
DO
   BEGIN
       -- 调用存储过程(假设有一个 backup_procedure)
       CALL backup_procedure();
       
       -- 或者直接写 SQL
       INSERT INTO backup_log (message) VALUES ('Daily backup completed');
   END;

 示例 2:创建一个单次执行的事件​

CREATE EVENT one_time_cleanup
ON SCHEDULE AT '2023-10-15 14:30:00'
DO
   DELETE FROM temp_table WHERE created_at < NOW() - INTERVAL 7 DAY;

 示例 3:使用复杂时间间隔​

 -- 每周一上午 8 点执行
CREATE EVENT weekly_report
ON SCHEDULE EVERY 1 WEEK
STARTS '2023-10-09 08:00:00'
DO
   CALL generate_weekly_report();

 验证事件是否创建成功​

 SHOW EVENTS FROM your_database_name;

注意事项​

  1. ​权限要求​
    用户需要具备 EVENT 权限(或拥有 ALL PRIVILEGES)。

  2. ​时区影响​
    事件的执行时间基于 MySQL 服务器的时区设置(可通过 SELECT @@global.time_zone; 查看)。

  3. ​事件状态​

    • 创建后默认状态为 ENABLED(启用)。
    • 可通过 ALTER EVENT 修改状态:

              ALTER EVENT event_name DISABLE;  -- 禁用事件
              ALTER EVENT event_name ENABLE;   -- 启用事件

性能影响​
频繁执行的事件可能对数据库性能产生影响,需合理设置时间间隔。 

​常用管理操作​

操作 语句示例
​禁用事件​ ALTER EVENT event_name DISABLE;
​启用事件​ ALTER EVENT event_name ENABLE;
​删除事件​ DROP EVENT IF EXISTS event_name;
​修改事件​ 先删除再重新创建,或使用 ALTER EVENT

通过以上方法,可以灵活创建和管理 MySQL 的定时任务(事件)。

---------------------------------------------------------------------------------------------------------------------------------

 二、在 MySQL 中,​​存储过程(Stored Procedure)​​ 是一组预编译的 SQL 语句集合,可以通过名称重复调用,常用于封装复杂的业务逻辑或重复性操作。以下是创建和使用存储过程的详细说明及示例:


​1、创建存储过程的基本语法​

 

sql

复制

DELIMITER $$  -- 更改默认分隔符,避免与存储过程中的分号冲突

CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] param_name data_type, ...)
BEGIN
    -- SQL 语句块
    -- 可以包含条件判断、循环、事务等
END$$

DELIMITER ;  -- 恢复默认分隔符
​参数说明​​:
  1. IN 参数​​:输入参数(默认),调用时传入值。
  2. OUT 参数​​:输出参数,存储过程执行后返回结果。
  3. INOUT 参数​​:既是输入又是输出参数。
  4. DELIMITER​:临时更改语句结束符,避免存储过程中的分号被误解析。

​2、创建存储过程的示例​

​示例 1:无参数的简单存储过程​
 

sql

复制

DELIMITER $$

CREATE PROCEDURE GetTotalUsers()
BEGIN
    SELECT COUNT(*) AS total_users FROM users;
END
$$

DELIMITER ;

-- 调用存储过程
CALL GetTotalUsers();
​示例 2:带输入参数的存储过程​
 

sql

复制

DELIMITER $$

CREATE PROCEDURE GetUserB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值