我在數據庫1中有以下1個數據庫表,在數據庫2中有1db表,現在兩個表的結構完全相同。現在會發生什麼是表1(DB1)每天添加新行,我需要更新表1(DB 2)中的表1(DB 1)新行,以便這兩個表保持不變。 cron會在午夜觸發一個php腳本來完成這項任務。什麼是最好的方式來做到這一點,以及如何使用PHP/MySQL?將一個數據庫表中的非現有行復制到另一個數據庫表中?
0
A
回答
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和積極的表變量。當你這樣做時,丟掉主表將失去主鍵,噢以及..容易重新加入
1
您可能在意看看複製(請參閱http://dev.mysql.com/doc/refman/5.4/en/replication-configuration.html)。這是做到這一點的「正確」方式;儘管如此,對於小型表格來說,上述解決方案可能更好(當然也更容易)。
0
我會建議複製,因爲已經建議。但是,另一種選擇是使用mysqldump
來獲取所需的行並將它們發送到另一個表。
mysqldump -uUSER -pPASSWORD -hHOST --compact -t --where="date=\"CURRENT_DATE\"" DB1 TABLE | mysql -uUSER -pPASSWORD -hHOST -D DB2
更換USER
,HOST
和PASSWORD
與數據庫的登錄信息。如果DB1
和DB2
具有不同的訪問信息,則可以爲命令的每個部分使用不同的信息。 DB1
和DB2
是數據庫的名稱,TABLE
是表的名稱。
您也可以修改--where
選項以僅抓取需要更新的行。希望你有一些查詢可以使用。正如前面提到的,如果表中有一個主鍵,你可以抓住這DB2
已經使用類似
KEY=`echo "SELECT MAX(KEY_COLUMN) FROM TABLE;" mysql -uUSER -pPASSWORD -hHOST -D DB2`
命令東西是bash shell腳本的最後一個鍵(然後WHERE
子句中使用該值以上)。根據您的主鍵生成的方式,這可能是一個壞主意,因爲如果行存在,可能會將行添加到鍵空間中的空洞中。
只要有一個可以選擇這些行的查詢,只要行被更改,該解決方案也可以工作。只需將--replace
選項添加到mysqldump
命令。在你的情況下,最好添加一些類型的值,比如你可以比較的日期更新。
是否有行從第一個數據庫中刪除,這些刪除操作是否也需要反映在第二個數據庫中?另外,你有沒有一個唯一的表格密鑰? – tvanfosson 2010-06-28 12:32:23
行永遠不會被刪除,沒有唯一的密鑰 – Roland 2010-06-29 07:42:43