最近上班,技术大佬给我一个需求,就是把一个表的数据迁移到另一个新表上,后来查看两张表,表的结构不相同,还有些数据也是没有的,这时候就在查百度了,找方法;因为无论是sql还是php列类型和长度必须相同,不然的类型一变值会变形或者损坏,
后来我想到了两种方法
1、php脚本
少量数据还行,如果数据量大的话可能在陵城开个定时任务跑了,代码如下:
header("Content-type:text/html;charset=utf-8");
$conn = mysql_connect("127.0.0.1","root","root");
mysql_select_db('dev_djcscs',$conn);
mysql_query("set names utf8");
$re= mysql_query("SELECT count(*) FROM cscms_like ");
$row=@mysql_fetch_row($re);
$count = $row[0];
$total_page = ceil($count/5);
for($i=1;$i<=$total_page;$i++){
$ff = ($i-1) * 5
$re1= mysql_query("SELECT kk.`CS_Name`,kk.`CS_User`,kk.`CS_DID`,kk.`CS_AddTime`,u.`id` FROM cscms_like kk LEFT JOIN tc_user u ON u.`username`=kk.`CS_User` LIMIT $ff, 10");
$records=array();
while($row=@mysql_fetch_row($re1)){
$records[]=$row;
}
mysql_select_db('dev_djcscs',$conn);
mysql_query("set names utf8");
$sql2="INSERT INTO tc_zan(mid,uid,addtime,aid,title,username) VALUES";
foreach ($records as $ite){
$valuestr = "18,{$ite[4]},' ',{$ite[2]},"."'".$ite[0]."'".",'".$ite[1]."'";
$sql2 .= "(".$valuestr."),";
}
$sql2 = substr($sql2,0,-1);
mysql_query($sql2);
}
mysql_close();
这是按分页的形式跑的脚本,只能在后台进程跑了;
2、从mysql 入手
可以先把表复制出来另一张表,这就防止表不小心把数据弄丢失了,如果你是要几张表的数据合到一张表,
可以先把一张的数据插入到另一张表现,在根据字段表更新(十几万的数据速度还是很快的),代码如下
insert into tc_money_log (`uid`,`action`,`score`,`addtime`,`do_uid`,`title`)
select `CS_UID`,`CS_CID`,`CS_RMB`,`CS_AddTime`,`CS_UID` as `do_uid`,`CS_Name` from tc_money_log1 where not exists(select `uid`,`action`,`score`,`addtime`,`do_uid`,`title` from tc_money_log)
UPDATE tc_money_log AS z JOIN tc_user AS u ON z.uid=u.id SET z.uname=u.nickname;
有什么可以改进的话,可以给我留言,嘻嘻嘻
未经允许不得转载:铁东博客 » mysql如何处理大量数据从一个表到另一个表(表结构不相同)