提前祝大家新年快乐,诸事顺利!
接下来,记录一些mysql触发器的简单实例。
1.同步添加数据
- 说明:
history 全部指标记录表
self_kpi KPI指标参照表
self_kpi_history KPI指标记录表
- 关系:
三表itemid相同
- 需求:
判断history的添加数据是否是KPI指标,如果是就将数据添加到self_kpi_history,反之则不添加。
- 表数据省略。。。
代码如下:
delimiter ||
DROP TRIGGER IF EXISTS tri_kpi_history ||
create trigger tri_kpi_history
after insert on history
FOR EACH ROW
begin
if exists
(select 1 from self_kpi where self_kpi.itemid = new.itemid ) then
insert into self_kpi_history(itemid,clock,`value`,ns)
values (new.itemid,new.clock,new.`value`,new.ns);
end if;
end||
delimiter ;
2.更新指定字段的值
- 说明:
self_kpi_history表
- 需求:
添加了name和hostid字段,要求添加数据时,插入新增字段的值。(这个描述应该可以的吧)
代码如下:
delimiter ||
DROP TRIGGER IF EXISTS tri_self_kpi_history ||
create trigger tri_self_kpi_history
before insert on self_kpi_history
FOR EACH ROW
begin
declare name VARCHAR(100);
declare hostid BIGINT(20);
set name = (select self_kpi.item_name from self_kpi where self_kpi.itemid = new.itemid);
set hostid = (select items.hostid from items where items.itemid = new.itemid);
set new.name = name;
set new.hostid = hostid;
end||
delimiter ;
3.计算分数
- 说明:
self_kpi_history
self_weight_grade
- 需求:
判断kpi指标值在哪个区间,并把分数插入相应的表中。
代码如下:
delimiter ||
DROP TRIGGER IF EXISTS tri_self_kpi_grade ||
create trigger tri_self_kpi_grade
after insert on self_kpi_history
FOR EACH ROW
begin
if(new.name like '%使用率%') then
insert into self_weight_grade(mc,qzf,clsj)
values (new.itemid,case when new.value <= 10 then 90 when new.`value` <= 30 then 80 when new.`value` <= 60 then 60 when new.`value` >60 then 20 end,now());
elseif(new.name like '%可用率%') then
insert into self_weight_grade(mc,qzf,clsj)
values (new.itemid,case when new.value >= 90 then 90 when new.`value` >= 70 then 80 when new.`value` >= 40 then 60 when new.`value` <40 then 20 end,now());
end if;
end||
delimiter ;
先写这三个吧,做个笔记,加深一下记忆。。。