大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说mysql 函数、事件( 建立一个存储引擎为memory(已建好)的表,通过事件实现插入的每条数据30分钟后自动删除)「终于解决」,希望您对编程的造诣更进一步.
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();
原文地址:https://www.cnblogs.com/zcxxcvbn/archive/2022/02/26/15937864.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5483.html