MySQL 触发器(本文章为同一个实例中两个表的同步增删改)

本文讲的是两个表的数据(修改操作)同步,触发器不止是实现数据同步,还可以做其他的事情

一、MySQL触发器基本概念和要素

触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(after/before)
4.触发事件(insert/update/delete) (以上概念是抄袭别人的)

二、触发器基本语法

create trigger triggerName
after/before insert/update/delete on 表名
for each row #这句话在mysql是固定的
begin
 sql语句
end; 

三、触发器原理

数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE

以上操作在数据库中均在内存中会生成临时表

INSERT 操作会生成 一个new表

UPDATE 即会生成一个new表,也会生成一个old表

DELETE操作会生成一个old表

!!!注:本文章讲的是两个表的数据同步,所以要保证 Table1 Table2 两个表的表结构,初始数据一样!!!否则会出现未知事情哟!

而触发器正式利用这些临时表实现的(网上也有说会生成 insertd表,deleted表,那种实现方式本人技术太弱,未能实现)

四、具体实现

1、插入操作;d1库Table1中达到触发条件,即触发,将new表中的数据,insert到要修改的表(d2.Table2)

USE d1 ;
  DROP trigger IF EXISTS tr_INSERT_d1 ;
CREATE TRIGGER tr_INSERT_t1 AFTER INSERT ON Table1 FOR EACH ROW
BEGIN
INSERT INTO d2.Table2
 VALUES
  (
    new.id,
    new.NAME,
    new.title,
    new.subtitle,
    new.short_desc,
    new.access,
    new.deleted_at,
    new.created_at,
    new.updated_at,
    new.listorder,
    new.GROUP,
    new.model
  );
END;

2、更新操作;d1 库 Table1达到update触发条件,即触发,将new表中数据更新d2.Table2(本文id为筛选条件)

USE d1;
DROP TRIGGER
IF EXISTS tr_UPDATE_t1;
CREATE TRIGGER tr_UPDATE_t1 AFTER UPDATE ON Table1 FOR EACH ROW
BEGIN
UPDATE d2.Table2
SET d2.Table2. NAME = new. NAME,
 d2.Table2.title = new.title,
 d2.Table2.subtitle = new.subtitle,
 d2.Table2.short_desc = new.short_desc,
 d2.Table2.access = new.access,
 d2.Table2.deleted_at = new.deleted_at,
 d2.Table2.created_at = new.created_at,
 d2.Table2.updated_at = new.updated_at,
 d2.Table2.listorder = new.listorder,
 d2.Table2.GROUP = new.GROUP,
 d2.Table2.model = new.model
WHERE
	d2.Table2.id = new.id;
END;

3、删除操作;d1 库 Table1达到delete触发条件,即触发,将
d2.Table2 表中 和id和new表中一致的删除(本文是id)

USE d1;
DROP TRIGGER
IF EXISTS tr_DELETE_t1;
CREATE TRIGGER tr_DELETE_t1 AFTER DELETE ON Table1 FOR EACH ROW
BEGIN
DELETE
FROM
	d2.Table2
WHERE
	d2.Table2.id = old.id;
END;

其他;查看触发器

SHOW TRIGGERS;

本文是本人自己看别人博客总结出来的,实例代码亲测,但概念性语句不太专业,望指正!

发表评论

电子邮件地址不会被公开。 必填项已用*标注