Navicat
是一个非常好用的可视化mysql管理软件(其他数据库也有对应版本的支持)
它拥有非常丰富的功能,结构同步、数据同步、数据传输、进程监控、数据导出导入等等
但这是一个付费软件,新用户可以免费试用,这个问题是笔者在以前试用处理数据的时候遇到的。
在A和B机器上分别有结构相同
,数据不完全相同
的两个数据库
比如
A机器上的表
id | name | age |
---|---|---|
1 | 宣言 | 21 |
2 | Siam | 21 |
B机器上的表
id | name | age |
---|---|---|
1 | 宣言B | 22 |
2 | SiamB | 22 |
现在要实现的点是:将两个表的数据合并为一个,以后统一使用一个数据库即可。
在使用数据同步的时候,能筛选出不同数据,但是却不能运行,因为筛选出的数据主键在第二个数据库中已经被占用。
使用软件,选择A同步到B,那么会筛选出id 1 2两条数据
生成的语句却是以下这样子的
insert into 表名 (id, name, age) values (1, '宣言', 21) ...
在B中运行这样的语句。主键id重复,自然就会产生失败了
因为我这里需要处理的数据量比较小
我这里采用的是比较直接的方法,如果有更好的方式,请大家在评论中留言,一起探讨
$data = file_get_contents("./data.txt");
$data = json_decode($data, true);
foreach ($data as $key => $value){
unset($value['id']);
$sql = "INSERT xxx " . array_to_sql($value);
mysql_query($sql,$db);
}
echo "ok";
因为是一个临时的脚本,这里就没有引入其他类库,用了面向过程的php代码来完成,大概思路就是这样子。
如果是使用mysqladmin,还可以在导出的时候直接选成导出php array 也许会更方便哦!