mysql 存储过程和事件调度
存储过程(procedure):
建立一个存储过程需要知道的基础知识
1.确定输入/输出的参数和类型:
IN tname varchar(20) 其中 IN 表示输入参数,tname 是参数名 varchar(20) 是参数类型
RETURNS int(10) 其中 RETURNS 表示输出 返回 ,int(10) 表示 返回类型
2.定义变量和赋值。
declare 定义变量 例如 declare a float;
set 赋值 例如 set a=0; 或者 set a = rand();
如果set 的变量前面有@符号表示这个变量是一个会话变量。否则是一个局部变量。
3.过程的出体部分。可以是各种运算,也可以是数据库操作。支持 if ...else 、循环等基本语法。
4.程序可以有返回值 也可以没有
5.调用存储过程 使用 call 例如 call pro_name('1','2');
建立一个存储过程的格式:
create procedure 存储过程名称 (IN $table_name varchar(20),IN $field varchar(10))
begin //主体开始
//主体
end // 主体结束
definer
例如:
delimiter $$ 设置语句结束符为 // DROP PROCEDURE IF EXISTS select_number// create procedure select_number(in ac int) begin declare a text; set a=ac; select a; end$$ delimiter ; //将语句结束改回;
因为在存储过程中使用了 ;号 为了不让mysql 运行 需要修改mysql 语句结束符;
调用
call select_number(11);
结果为 :
基于这个建立一个事件:
create event if not exists test on schedule every 10 second on completion preserve do call select_number(11);
每隔10秒执行以下 select_number 这个存储过程 test 是时间的名称;
定时插入案例
存储过程为:
delimiter $$ create procedure insert_name(in name varchar(20)) begin insert into a2 values(name); end$$ delimiter ;
建立每个10秒插入事件:
create event if not exists insert_name on schedule every 10 second on completion preserve do call insert_name('test_name');
每隔多一点时间 查看一个a2 表 看看是否多了一个 test_name 的值;
关闭事件:
alter event insert_name on completion preserve disable;
删除事件:
drop event insert_name;
查看所有事件:
show events;
如果event 执行不了,可能是因为event功能没有打开;
查看event是否打开:
show variables like '%scheduler%';
开启:
set global event_scheduler = 1;
查看有哪些存储过程:
show procedure status;
查看存储过程建立代码:
show create procedure proc_name;