【问题标题】:How to append a mysql table to another table in a different database如何将mysql表附加到不同数据库中的另一个表
【发布时间】:2011-08-09 04:51:42
【问题描述】:

我想从一个数据库中获取一个表,并将此数据附加到另一个数据库中的表中。但是,它们具有相似的数字(包括 id),需要在复制之前对其进行更新。是否有可用的功能可以自动执行此操作?还是我需要在两者之间写一个脚本?

到目前为止,我得到了:

#!/bin/sh
mysqldump -uuser1 -ppw1 database1 table1 > /home/user/public_html/database1.sql --skip-add-drop-table --skip-create-options
mysql -uuser2 -ppw2 database2 < /home/user/public_html/database1.sql
rm /home/user/public_html/database1.sql

【问题讨论】:

  • 两个数据库都在同一个服务器上吗?您是否尝试将数据从一个表附加到另一个表?
  • 是的,它们都位于同一台服务器上。是的,尝试将数据从一个表附加到另一个数据库(同一服务器)中的另一个表

标签: mysql database shell append


【解决方案1】:

您可以从一个表中选择并将其插入到另一个表中。结果将“附加”到原始数据中。

insert into new_table (id, name) select old_id, old_name from old_table;

将一个数据库中的表附加到另一个数据库中的表

insert into new_database.new_table (id, name) select old_id, old_name from old_database.old_table; 

【讨论】:

  • 查询假定旧 ID 和新 ID 不冲突。如果不是这种情况,只需从查询中删除 ID 字段。
  • 这不是假设两个表都在同一个数据库中吗? (实际目标是把不同数据库的很多表放在一个新数据库中的一个新表中)
  • insert into new_database.new_table (id, name) select old_id, old_name from old_database.old_table;
【解决方案2】:

听起来像通过脚本执行会更安全,这似乎很简单 - 只需从第一个数据库中获取数据并执行批量插入到另一个数据库中,让 mysql 自己处理 id。在任何下降脚本语言中,这应该需要大约 10-30 LOC,并且可以让您更好地控制结果。

【讨论】:

    【解决方案3】:

    我通过创建一个为每个新数据库创建新连接的 php 脚本解决了这个问题。此脚本先清空主表,然后再追加其他表的数据。让第一个条目为 NULL 并让 $row[x] 从 1 开始确保它附加.. 不知道这是否是最好的解决方案,但它有效。

    <?php
    
    $db_user = "database_all_usr";
    $db_pw = "";
    $db_database = "database_all_db";
    
    mysql_connect("localhost", $db_user, $db_pw) or die(mysql_error());
    mysql_select_db($db_database) or die(mysql_error());
    
    $sql = "TRUNCATE TABLE table_all";
    mysql_query($sql) or die(mysql_error());
    
    copy_table("database1_db","database1_usr","",$db_database,$db_user,$db_pw);
    copy_table("database2_db","database2_usr","",$db_database,$db_user,$db_pw);
    
    function copy_table($db_current,$db_user_current,$db_pw_current,$db_host,$db_user_host,$db_pw_host){
    
        mysql_connect("localhost", $db_user_current, $db_pw_current) or die(mysql_error());
        mysql_select_db($db_current) or die(mysql_error()); 
    
        $sql = "SELECT * FROM table";
    
        $result = mysql_query($sql) or die(mysql_error());
    
        mysql_connect("localhost", $db_user_host, $db_pw_host) or die(mysql_error());
        mysql_select_db($db_host) or die(mysql_error());
    
        while ($row = mysql_fetch_row($result)) {
    
            $sql = "INSERT INTO table_all VALUES (NULL, '$row[1]', '$row[2]')"; //adapt to the amount of columns
            mysql_query($sql) or die(mysql_error());
        }   
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2019-03-17
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多