MySQL 同步表


简述

  • 小编之前没有搞过数据库编程,所以在网上看看学习数据库都有哪些书籍,结果发现有两本教程是比较火的,一本是《深入浅出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 changed
mysql> 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 changed
mysql> 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 changed
mysql> 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。这里面暂时没有设计事务!

你可能感兴趣的:(mysql)