mysql函数、事件(建立一个存储引擎为memory(已建好)的表,通过事件实现插入的每条数据30分钟后自动删除)

database

use db;

create table lg(

id int unsigned,

naem varchar(20),

t timestamp,

message varchar(100)

);

select *from lg;

drop table lg;

insert into lg(id,naem,t,message)value(1, "zcx",now(),"message");

-- 建立存储过程查询数据

delimiter $

create procedure ins()

begin

select *from lg;

-- insert into lg value( id,naem,now(),message);

end $

delimiter;

call ins();

drop procedure ins2;

-- 建立存储过程插入数据 in 输入,out输出

delimiter $

create procedure ins2(in id int,in naem varchar(20) ,in t timestamp,in m varchar(100))

begin

insert into lg value(id,naem,t,m);

end $

delimiter;

call ins2(4,"zcx",now(),"你好2");

-- 定义函数

use db;

delimiter $

create function pf(i int)

returns  int

begin

    declare t int default 3 ;

    return i*i*t;

 end $

delimiter;

select pf(3);

my.ini

# 解决导入脚本时funtion报错
log_bin_trust_function_creators=1 

-- 13627389281 1362****281

delimiter $

create function f_m(t char(11))

returns char(11)

begin

return insert(t,5,4,"****");

end $

delimiter;

select f_m("15294939301");

一、函数

-- 查询声明了那些函数

show function status where emp="f_m";

-- 自定义函数

delimiter $

create function pf(i int)

returns int

begin

return i * i;

end$

delimiter ; 

-- 调用函数

select pf(19), pf(2), pf(6);

-- 删除定义的函数

drop function `f_level`; 

-- 函数返回多长时间前的消息

delimiter $

create function f_addtime(t datetime)

returns varchar(100)

begin

declare t1 int;

declare t2 int;

declare m varchar(30);

set t1 = unix_timestamp();

set t2 = unix_timestamp(t);

if t1 - t2 < 60 then

set m = "刚刚";

elseif t1 - t2 < 3600 then

set m = concat(round((t1 - t2) / 60), "分钟前");

elseif t1-t2 < (3600*24) then

set m = concat(round((t1 - t2) / 3600), "小时前");

else

set m = from_unixtime(t2);

end if;

return m;

end $

delimiter ;

二、event事件

优点
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
缺点
定时触发,不可以调用。

-- 事件 自动定时器 作业 mysql 5.1 新增
-- 开启关闭事件调度器
-- ON 1 开启事件功能
-- OFF off 0 关闭事件功能

show variables like "%event_scheduler%"

set global event_scheduler = OFF

set global event_scheduler = on;

set @@global.event_scheduler = on;

set global event_scheduler = 1;

set @@global.event_scheduler = 1;

set global event_scheduler = on;

-- event_scheduler

show variables like "%schedule%";

-- 查看数据库 d3中的所有事件对象,运行完的事件对象自动删除。 

select `EVENT_NAME` from `INFORMATION_SCHEMA`.`EVENTS`

where `EVENT_SCHEMA` = "d3"

order by EVENT_NAME;

create event e1

on schedule

at current_timestamp + interval 1 hour

do update myschema.mytable set mycol = mycol + 1;

delimiter //

create event e1 on schedule at current_timestamp + interval 5 second

do select now();

delimiter ;

create event e2 on schedule at "2021-09-14 15:08:00"

do select now();

drop table if exists tt;

create table tt(

id int unsigned auto_increment,

regtime datetime,

primary key(id)

)

select * from tt;

-- 当前系统5秒后执行事件,事件执行就,删除此事件

create event e3 on schedule at current_timestamp + interval 5 second

do insert into tt value(null,now());

-- 10秒后开始,每5秒执行一次 插入

create event e4 on schedule

every 5 second

starts current_timestamp + interval 10 second

do insert into tt value(null,now());

-- 立即开始,每10 秒清空一下表 at starts ends

create event e5 on schedule

every 10 second ends "2021-09-14 15:22:00"

do truncate tt;

drop event e5;

-- 查看所有事件

show events;

-- 修改事件的名称

alter event ee1 rename to e01

-- 删除事件

drop event if exists e01;

-- 事件暂停禁用,但不删除

alter event e4 disable;

-- 事件启用

alter event e4 enable;

一个练习题

表一:

create table t(

id char(36) primary key,

naem varchar(20),

dt datetime,

pwd varchar(20),

msg varchar(20)

);

select *from t;  

插入数据:

insert t value(uuid(),"张三",now(),"123456","多好多好");

insert t value(uuid(),"李四",now(),"123456","相关");

insert t value(uuid(),"王五",now(),"123456","相关");

insert t value(uuid(),"秋梅",now(),"123456","三个");

表二:

create table tt(

id char(36) primary key,

naem varchar(20),

dt datetime,

pwd varchar(20),

msg varchar(20)

)engine=memory;

--  触发器 插入数据如果t表中有就插入tt表,没有就删除

delimiter $

create trigger stt before insert on tt for each row

begin

  if new.naem not in(select naem from t) then

  delete from tt where naem not in(select naem from t);

  end if;

end $

delimiter;

-- -- 建立一个存储引擎为memory(已建好)的表,通过事件实现插入的每条数据30分钟后自动删除

答案一:

create event e2 on schedule every 5 second do delete from tt where now()>date_add(dt,interval 30 minute);

答案二:

-- 先建立存储过程

delimiter $

create procedure autod()

begin

delete from tt where now()>date_add(dt,interval 30 minute);

end $

delimiter;

-- 在建立一个事件,每五秒检查一次

create event e1 on schedule every 5 second ends do call autod();

 

以上是 mysql函数、事件(建立一个存储引擎为memory(已建好)的表,通过事件实现插入的每条数据30分钟后自动删除) 的全部内容, 来源链接: utcz.com/z/536307.html

回到顶部