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

时间:2011-08-09 04:51:42

标签: mysql database shell append

我想从一个数据库中获取一个表,并将此数据附加到另一个数据库中的表中。但是,它们具有相似的数字(包括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

3 个答案:

答案 0 :(得分:7)

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

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; 

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我通过创建一个为每个新数据库创建新连接的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());
    }   
}
?>