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