MySQL 同步表

来源:互联网 发布:淘宝买家不退货 编辑:程序博客网 时间:2024/06/06 01:17

简述

  • 小编之前没有搞过数据库编程,所以在网上看看学习数据库都有哪些书籍,结果发现有两本教程是比较火的,一本是《深入浅出MySqL第二版》、一本是《高性能MySQL第三版》,小编本来对技术是十分痴迷,打算要买下这两本书籍,一看价格小编也是作实窘,无奈舍爱在网上查看没有PDF版,结果还真有!甚是惊喜!

  • 于是乎,小编就先从深入浅出MySQL学起,大概学了四天时间,里面主要分5大块:基础篇、开发篇、优化篇、管理维护篇、架构篇,小编直接从第2块看起!目前也是正在学习,感觉讲的还是比较浅,只是教如何使用,以及讲述里面的基本概念。

需求:

  1. 同一个数据库,表写入数据到b表,当a表有新数据时 程序怎么自动检测到b表里面 最后实现数据同步。参考链接:http://stackoverflow.com/questions/4753878/how-to-program-a-mysql-trigger-to-insert-row-into-another-table;http://www.codeproject.com/Questions/650112/Update-row-to-another-table-using-mysql-trigger;
  2. MySQL创建触发器实现统一主机下两个数据库的表同步(主从)
    首先创建两个数据库a,b;
    其次在两个数据库中创建表table1,table2(结构一致,表名可以不一样)
    再次在数据库a创建中创建触发器a_copy_b
    再次向数据库table1添加数据
    再次查询table1,table2 看看结果是否一样!
    (创建触发器需要在mysql dos 命令下创建!)
  3. 下面是部分mysql doc命令
在数据库a中创建触发器use a;mysql> delimiter $$mysql> create trigger a_copy_b after insert on table1 for each row    -> begin insert into b.table2(id,val) values(new.id,new.val);    -> end $$Query OK, 0 rows affected (0.06 sec)向数据库a中表table1插入数据mysql> use a;Database changedmysql> insert into table1 values('006','5632156');Query OK, 1 row affected (0.04 sec)查询数据库a中表数据mysql> select * from table1;+------+---------+| id   | val     |+------+---------+|    1 | 1354854 ||    2 | 1354854 ||    3 | 1354854 ||    4 | 5656556 ||    6 | 5632156 |+------+---------+5 rows in set (0.00 sec)查询数据库b中表数据mysql> use b;Database changedmysql> select * from table2;+------+---------+| id   | val     |+------+---------+|    6 | 5632156 |+------+---------+1 row in set (0.00 sec)可以看到,当表table1有数据增加时,表table2也会有数据增加,同理delete,updata原理一样!

3.不同数据库,同一个mysql 实例,同一张表

创建触发器use a;mysql> delimiter $$mysql> create trigger a_copy_b after insert on table1 for each row    -> begin insert into b.table2(id,val) values(new.id,new.val);    -> end $$Query OK, 0 rows affected (0.06 sec)创建存储过程mysql> use a;Database changedmysql> delimiter $$mysql> create procedure check_insert()    -> begin    -> insert into b.table2 select * from table1 where id not in (select id from b.table2);    -> end $$    mysql> delimiter ;Query OK, 0 rows affected (0.01 sec)创建定时事件mysql> use a;mysql> create event e_sync_ab on schedule every 1 second    -> on completion preserve    -> do call check_insert();Query OK, 0 rows affected (0.00 sec)第一次启动,需要将第一个数据库表中全部数据,导入另一个数据库表中,以后表table1 新增一条记录,表table2也会新增一条记录,同时,数据库a中增加了定时事件,定时任务可以调用存储函数,来解决插入失败的数据,定时操作可以每两个小时到数据库a中table1查询数据库库b表table2中没有的记录,然后插入表table2。这里面暂时没有设计事务!

0 0