铁东博客

mysql如何处理大量数据从一个表到另一个表(表结构不相同)

   最近上班,技术大佬给我一个需求,就是把一个表的数据迁移到另一个新表上,后来查看两张表,表的结构不相同,还有些数据也是没有的,这时候就在查百度了,找方法;因为无论是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如何处理大量数据从一个表到另一个表(表结构不相同)

评论,共有 0 条评论

  • 昵称 (必填)
  • 邮箱 (必填)
暂无评论数据,赶紧来评论吧