当前位置:数据库 > MySQL >>

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

具体环境: 同一主机 数据库A和B 现在需实现A数据库中表table1和B数据库中表table2插入 删除 更新同步 table1和table2表结构一致 请帮忙写下完整的触发器代码 补充:需实现双向同步,所以两边创建触发器要避免递归死循环。
追问:delete 和 update的话 上面的代码除了 insert 还有哪些地方需要修改呢

尤其是变量名 触发器标志有什么注意事项Mysql里面好像用不了@disable_trigger      上面的sql程序 该放在哪里执行呢
答案:首先,建立要用于测试的 数据库 与 表。
create database a;
create database b;

use a
create table table1(id int, val int);

use b
create table table2(id int, val int);



然后建触发器

use a

DELIMITER //
CREATE TRIGGER tr_Insert_t1
  AFTER INSERT ON table1
FOR EACH ROW
BEGIN
  -- 检查当前 环境,避免递归.
  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 b

DELIMITER //
CREATE TRIGGER tr_Insert_t2
  AFTER INSERT ON table2
FOR EACH ROW
BEGIN
  -- 检查当前 环境,避免递归.
  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 b
Database changed
mysql> insert into table2 values(2,2);
Query OK, 1 row affected (0.01 sec)


mysql> use a
Database changed
mysql> 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)
其他:一楼的插入答案可以,楼主可以先把插入看懂,试着弄。 CREATE OR REPLACE TRIGGER trg_A
after update
of aa
ON a
referencing new as new old as old
for each row
declare

begin
 if :new.aa<>:old.aa then
update B set aa=:new.aa where A.XX=B.XX;
end if;

   exception
     when others then
       null;
end trg_A;
 建议还是先把触发器的语法研究一下啊,然后再根据写的代码研究一下所有操作的写法,以后就可以自己写了…… 大神,求赐教,我也是这个问题 

上一个:数据库错误 MySQL #1064
下一个:mysql配置到到最后start service就失败。重新卸载过N遍,删除了安装文件,数据库文件,注册表。

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,