当前位置: 首页>数据库>正文

zabbix 触发器设置为多重 触发器笔记

  • 触发器:mysql响应数据库操作语句而执行的一条Mysql语句,触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
  • 创建触发器时,需要给出4条信息
  • 唯一的触发器名
  • 触发器关联的表
  • 触发器应该响应的的活动
  • 触发器核实执行
  • 使用触发器
  • insert触发器
  • delete触发器
  • update触发器
  • 删除触发器
  • 创建触发器create trigger 触发器名 after/before 操作作语句
创建一个表,用来记录数据库操作日志
create  table order_log(id int auto_increment primary key,o_date datetime,order_num int)

new.order_num --insert触发器代码内可以引用new的虚拟表,用来访问被插入的字段order_num,如果是在before触发器中,new中还可以更改行的值
old.order_num --删除触发器代码内可以引用old的虚拟表,用来访问被删除的字段order_num

创建触发器:

delimiter //
create trigger trg_order_insert after insert on orders for each row--针对orders表中每一行,插入
begin
	insert into order_log(o_date,ordre_num) values (now(),new.order_num);--insert触发器代码内可以引用new的虚拟表,用来访问被插入的字段order_num,如果是在before触发器中,new中还可以更改行的值
end

使用触发器:

insert into orders (order_date,cust_id) values('2010-09-15',10001);
操作orders表时,会自动在order_log表中新增一条记录

修改日志表,添加一个操作类型字段

alter table order_log add dml_type varchar(10);

删除刚建立的触发器

drop trigger trg_order_inser

创建触发器,新增显示操作类型

delimiter //
create trigger trg_order_insert after insert on orders for each row--针对orders表中每一行,插入
begin
  insert into order_log(o_date,ordre_num,dml_type) values (now(),new.order_num,'insert');--insert触发器代码内可以引用new的虚拟表,用来访问被插入的字段order_num,如果是在before触发器中,new中还可以更改行的值
end

修改orders表,执行下面这行插入语句后,insert触发器会自动执行,从而order_log表中会自动插入一条数据,

insert into orders (order_date,cust_id) values ('2020-03-10',10002)
  • delete触发器
delimiter //
create trigger trg_order_delete after delete on orders for each row--针对orders表中每一行,删除操作
begin
	insert into order_log(o_date,ordre_num,dml_type) values (now(),old.order_num,'delete');--delete触发器代码内可以引用old的虚拟表,用来访问被删除的字段order_num
end

修改orders表,执行下面这行删除语句后,delete触发器会自动执行,从而order_log表中会自动插入一条数据,

delete from orders where order_num=20010
  • update触发器
delimiter //
create trigger trg_order_update after update on orders for each row--针对orders表中每一行更新操作
begin
	insert into order_log(o_date,ordre_num,dml_type) values (now(),old.order_num,'update');--update触发器代码内可以引用new和old的虚拟表,用来访问被删除的字段order_num
end
修改order表后,update触发器会自动执行,从而order_log表中会自动插入一条数据,
  • before触发器
delimiter //
create trigger trg_products_update before update on products for each row
begin
	if new.prod_price>old.prod_price*1.2 then 
		set new.prod_price=old.prod_price*1.2;
	end if;
end
如果修改products表时,修改产品的价格值大于修改前产品价格的1.2倍,那就将修改的那条数据的产品价格修改为修改前产品的价格的1.2倍数值
  • 关于触发器的进一步介绍
  • 应该用触发器保持数据的一致性(比如大小写,格式等)
  • 触发器的创建是需要权限的,但是触发器的执行是不需要权限的,当insert/delete/update语句执行时,触发器就会自动执行
  • mysql 5.1之后的版本才支持的触发器
  • 触发器可以创建审计跟踪
  • 可以同步实时地复制表中的数据
  • 自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理



https://www.xamrdz.com/database/6ew1962831.html

相关文章: