2010-06-28 84 views
0

我在數據庫1中有以下1個數據庫表,在數據庫2中有1db表,現在兩個表的結構完全相同。現在會發生什麼是表1(DB1)每天添加新行,我需要更新表1(DB 2)中的表1(DB 1)新行,以便這兩個表保持不變。 cron會在午夜觸發一個php腳本來完成這項任務。什麼是最好的方式來做到這一點,以及如何使用PHP/MySQL?將一個數據庫表中的非現有行復制到另一個數據庫表中?

+2

是否有行從第一個數據庫中刪除,這些刪除操作是否也需要反映在第二個數據庫中?另外,你有沒有一個唯一的表格密鑰? – tvanfosson 2010-06-28 12:32:23

+0

行永遠不會被刪除,沒有唯一的密鑰 – Roland 2010-06-29 07:42:43

回答

0

這可能會幫助你,我的一個類似有點事

$dropSQL = "DROP TABLE IF EXISTS `$targetTable`"; 
    $createSQL = "CREATE TABLE `$targetTable` SELECT * FROM `$activeTable`"; 
    $primaryKeySQL = "ALTER TABLE `$targetTable` ADD PRIMARY KEY(`id`)"; 
    $autoIncSQL = "ALTER TABLE `$targetTable` CHANGE `id` `id` INT(60) NOT NULL AUTO_INCREMENT"; 
    mysql_query($dropSQL); 
    mysql_query($createSQL); 
    mysql_query($primaryKeySQL); 
    mysql_query($autoIncSQL); 

顯然做我的數據庫中你將不得不修改taget和積極的表變量。當你這樣做時,丟掉主表將失去主鍵,噢以及..容易重新加入

0

我會建議複製,因爲已經建議。但是,另一種選擇是使用mysqldump來獲取所需的行並將它們發送到另一個表。

mysqldump -uUSER -pPASSWORD -hHOST --compact -t --where="date=\"CURRENT_DATE\"" DB1 TABLE | mysql -uUSER -pPASSWORD -hHOST -D DB2 

更換USERHOSTPASSWORD與數據庫的登錄信息。如果DB1DB2具有不同的訪問信息,則可以爲命令的每個部分使用不同的信息。 DB1DB2是數據庫的名稱,TABLE是表的名稱。

您也可以修改--where選項以僅抓取需要更新的行。希望你有一些查詢可以使用。正如前面提到的,如果表中有一個主鍵,你可以抓住這DB2已經使用類似

KEY=`echo "SELECT MAX(KEY_COLUMN) FROM TABLE;" mysql -uUSER -pPASSWORD -hHOST -D DB2` 

命令東西是bash shell腳本的最後一個鍵(然後WHERE子句中使用該值以上)。根據您的主鍵生成的方式,這可能是一個壞主意,因爲如果行存在,可能會將行添加到鍵空間中的空洞中。

只要有一個可以選擇這些行的查詢,只要行被更改,該解決方案也可以工作。只需將--replace選項添加到mysqldump命令。在你的情況下,最好添加一些類型的值,比如你可以比較的日期更新。