mysql 存储过程和事件调度

时间:2022-05-20 07:15:37

存储过程(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();

结果为  :

mysql 存储过程和事件调度

基于这个建立一个事件:

create event if not exists test
on schedule every second
on completion preserve
do call select_number();

每隔10秒执行以下  select_number 这个存储过程   test 是时间的名称;

定时插入案例

存储过程为:

 delimiter $$
create procedure insert_name(in name varchar())
begin
insert into a2 values(name);
end$$
delimiter ;

建立每个10秒插入事件:

create event if not exists insert_name
on schedule every 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 = ;

查看有哪些存储过程:

 show procedure status;

查看存储过程建立代码:

show create procedure proc_name;