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.uj5u.com/shujuku/433317.html
標籤:其他
上一篇:mysql 函式、事件( 建立一個存盤引擎為memory(已建好)的表,通過事件實作插入的每條資料30分鐘后自動洗掉)
