Как добавить таблицу MySQL в другую таблицу в другой базе данных - PullRequest
2 голосов
/ 09 августа 2011

Я хотел бы получить таблицу из одной базы данных и добавить эти данные в таблицу в другой базе данных.Однако они имеют похожие номера (включая идентификатор), которые необходимо обновить, прежде чем их можно будет скопировать.Есть ли функция, которая может сделать это автоматически?Или мне нужно написать сценарий между ними?

Пока у меня есть:

#!/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 ]

7 голосов
/ 09 августа 2011

Вы можете выбрать одну таблицу и вставить ее в другую. Результаты будут «добавлены» к исходным данным.

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 голос
/ 09 августа 2011

Похоже на то, что было бы намного безопаснее сделать с помощью скрипта, который кажется достаточно простым - просто захватите данные из первой БД и выполните пакетную вставку в другую, позволяя mysql обрабатывать идентификаторы самостоятельно. Это займет около 10-30 LOC на любом языке сценариев спуска и даст вам больше контроля над результатом.

0 голосов
/ 16 августа 2011

Я решил это, создав скрипт 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());
    }   
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...