MySQL创建触发器实现统一主机下两个数据库的表同步

来源:互联网 发布:用c语言编写三角形 编辑:程序博客网 时间:2024/06/05 03:15
首先建立要用于测试 数据库 与 表create database a;create database b;use acreate table table1(id int, val int);use bcreate table table2(id int, val int);建触发器use aDELIMITER //CREATE TRIGGER tr_Insert_t1  AFTER INSERT ON table1FOR EACH ROWBEGIN  -- 检查前 环境避免递归.  IF @disable_trigger IS NULL THEN    -- 设置禁用触发器标志.    SET @disable_trigger = 1;    -- 插入目标表    INSERT INTO      b.table2    VALUES      (new.id, new.val);    -- 恢复禁用触发器标志.    SET @disable_trigger = NULL;  END IF;END;//DELIMITER ;use bDELIMITER //CREATE TRIGGER tr_Insert_t2  AFTER INSERT ON table2FOR EACH ROWBEGIN  -- 检查前 环境避免递归.  IF @disable_trigger IS NULL THEN    -- 设置禁用触发器标志.    SET @disable_trigger = 1;    -- 插入目标表    INSERT INTO      a.table1    VALUES      (new.id, new.val);    -- 恢复禁用触发器标志.    SET @disable_trigger = NULL;  END IF;END;//DELIMITER ;测试执行效:mysql> use bDatabase changedmysql> insert into table2 values(2,2);Query OK, 1 row affected (0.01 sec)mysql> use aDatabase changedmysql> insert into table1 values (1, 1);Query OK, 1 row affected (0.00 sec)mysql> select * from table1;+------+------+| id   | val  |+------+------+|    2 |    2 ||    1 |    1 |+------+------+2 rows in set (0.00 sec)mysql> select * from b.table2;+------+------+| id   | val  |+------+------+|    2 |    2 ||    1 |    1 |+------+------+2 rows in set (0.00 sec)



delete 和 update的话 ,  就是  上面的触发器 定义的地方, 要修改触发器名字要修改触发器里面的 语句要修改.比如 delete 的触发器里面, 要 delete 另外一个表update的触发器里面, 要 update 另外一个表至于那个标志 @disable_trigger   注意事项就是, 不要在别的地方手动的执行SET @disable_trigger = 1;否则 所有的触发器,都要失效了。

原文地址:http://zhidao.baidu.com/link?url=e0CwvF_BShuLu_uSJ7VktwOOSYRxASOVu0fy0B6CYJCp6Ra9as_opFG-zlW0nBLXPoCg7zj_uLRHgrw0vqktwq

0 0
原创粉丝点击