美文网首页
同一主机下的两个数据库的表同步

同一主机下的两个数据库的表同步

作者: 茶饭不思 | 来源:发表于2018-08-16 23:40 被阅读0次

    首先,建立要用于测试的 数据库 与 表。

    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)

    delete 和 update的话 上面的代码除了 insert 还有哪些地方需要修改呢

    尤其是变量名 触发器标志有什么注意事项

    解决办法

    delete 和 update的话 ,  就是  上面的触发器 定义的地方, 要修改

    触发器名字要修改

    触发器里面的 语句要修改.

    比如

    delete 的触发器里面, 要 delete 另外一个表

    update的触发器里面, 要 update 另外一个表

    至于那个标志 @disable_trigger

    注意事项就是, 不要在别的地方

    手动的执行

    SET @disable_trigger = 1;

    否则 所有的触发器,都要失效了。

    相关文章

      网友评论

          本文标题:同一主机下的两个数据库的表同步

          本文链接:https://www.haomeiwen.com/subject/eeuabftx.html