目录:
---- 实现方法(一):通过写个php脚本实现
---- 实现方法(二):通过数据库管理工具导入(如:NavicatForMySQL)
实现方法(一):
通过写个php脚本实现
思路:
1: 首先连接成功:两台服务器的数据库。
(可以把服务器的旧数据表导出到本地数据库,并且把新表也创建在本地。
这样操作步骤就变为:把本地的旧表转移的本地的新表)
2:select查询原数据库表的数据,insert插入到新表。
3:先确认一下旧表中的多少条数据。数据过多,要分批量读取。因为数据多的话会超时。
4:在分批读取的时候记录下最后一新读取的ID.下次读取的时候重写sql语句,条件为大于上一次的id
PHP代码最大执行时间:
缺省的最长执行时间是 30 秒 由 php.ini 中的 max_execution_time 变量指定
所以,如果一次读取的数据条数过多,会导致超时。
解决办法:
方法a:最简单当然是修改 php.ini 中 max_execution_time 的数值,不过不是所有人都有
权修改 php.ini。 若修改了,记得操作完后再改回去。
也可以设置为0,表示无时间限制。
此方法不会修改默认的最大执行时间,只会在本次任务中有效.
操作前简单进行一些测试:
1:若数据已经存在,主键重复不会覆盖
2:若为空,可以insert成功吗?
chare类型可以insert成功,int类型不可以插入成功。
若字段类型为int,insert‘’或 Null 均不可以插入,
所以要判断插入int数据时,若为‘’或null,应赋值为:0
可能出现的问题:
1:转移后的数据条数变少了?
可能是有些数据insert失败。
例如:char类型的字段,当字符中含有英文状态的单引号、双引号时,会导致insert失败。
//通过正则,把"替换为“ ,把'替换为‘ ,即把英文状态的转换为中文状态,
$description = preg_replace('/"/', '”', $description);
$description = preg_replace('/\'/', '‘', $description);
因为英文引号会与sql语句中的混淆,导致数据insert操作不成功。
2: //查找非主键重复的插入失败的数据 即:查看哪条数据没有插入成功,进而找出失败的原因
if(mysql_query($sql1) == FALSE) {
$er = mysql_error();
// 主键冲突错误:Duplicate entry '1' for key 'PRIMARY'1
if( preg_match('/key/',$er) == 0 ) {
echo '非主键冲突错误';
echo $sql1;
}
}
简单例子:
<?php
header("Content-Type:text/html;charset=utf-8");
echo "数据库转移<br/>";
$con = mysql_connect("localhost","root","123");
mysql_select_db("demo", $con);
mysql_query('set names utf8',$con);//每次读取1000条数据 (要修改php的执行最大时间)
//$sql = "select * from table limit 0,1000"; //第一次读取1~1000条数据
//$sql = "select * from table limit 1000,1000"; //第二次读取1001~2000条数据$sql = "select * from table limit 2000,1000"; //第三次读取2001~3000条数据
$result = mysql_query($sql,$con);
while( $r_arr = mysql_fetch_array($result,MYSQL_ASSOC) ) {
$id = $r_arr['id'];
$brandid = $r_arr['name'];
$proclass = $r_arr['age'];
$proname = $r_arr['sex'];
$price = $r_arr['hobby'];
//新表1: 向新表1插入数据 (字符类型的字段,要加‘’)
$sql1 = "insert into new_1 value('','','');
mysql_query($sql1);
//新表2: 向新表2插入数据
$sql1 = "insert into new_2 value('','','');
mysql_query($sql2);
echo $id.' ';
}
?>
实现方法(二):通过数据库管理工具导入(如:NavicatForMySQL)
描述:把A表,导入到B表 (A表和B表的表结构可能有差别,比如:A表比B表多几个或者少几个字段)
步骤1、选择A表-》右击-》导出表-》选择.mdb的格式-》选择需要导出的字段-》导出
步骤2、选择B表-》右击-》导入向导-》选择导入类型:.mdb类型-》选择文件、选择表-》选择目标表或者新建表-》目标表的栏位与源表的栏位的配对-》选择导入模式-》导入