mysql触发器实例

提前祝大家新年快乐,诸事顺利!
接下来,记录一些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 ; 

先写这三个吧,做个笔记,加深一下记忆。。。
mysql触发器实例_第1张图片

你可能感兴趣的:(mysql)