首页 > 技术文章 > Mysql之 触发器(一种特殊模式)

sabertobih 2020-11-24 16:31 原文

分类:

  1. 数据库级触发器
  2. 表级触发器
  3. 行级触发器
  4. 增删改触发器(根据触发时机)

场景1:解除外键约束

一般来说,插表先插主表,删表先删从表(见:https://www.cnblogs.com/sabertobih/p/13966709.html

外键约束的创建限制:

>>>

如何用触发器实现:插表和删表没有外键的先后限制?

------------------------
drop table if exists userinfos;
drop table if exists uss;
create table userinfos(userid int primary key,uname varchar(20));
create table uss(userid int primary key,uname varchar(20));
insert into userinfos values('1','zs');
insert into userinfos values('2','df');
insert into userinfos values('3','hh');

insert into uss values('1','11');
insert into uss values('2','22');
insert into uss values('3','33');
alter table userinfos add constraint CONSTRAINT_D 
foreign key (userid) references uss(userid);
---------------------
## 删表可以先主表了
create trigger trg2 before delete 
on uss for each row
delete from userinfos where userid=old.userid
## 插表可以先从表了
create trigger trg3 before insert 
on userinfos for each row
insert into uss values(new.userid,new.uname);

场景2:实现对表的监控

基于触发器的CDC:原始数据表+insert触发器,可以在另外一张表中记录对原表的增删改查操作

事件机制

影响性能:因为数据库中直接多了一张表!所以很少使用此方法

其他监控方式:https://www.cnblogs.com/sabertobih/p/14031034.html

 

推荐阅读