簡體   English   中英

將不存在的行從一個數據庫表復制到另一數據庫表?

[英]Copying non existing rows from one database table to another database table?

我在數據庫1中有以下1 db表,在數據庫2中有1 db表,現在兩個表的結構完全相同。 現在發生的是表1(DB1)每天都會添加新行,我需要在表1(DB 2)中更新表1(DB 1)的新行,以使這兩個表保持不變。 cron會在午夜觸發php腳本來執行此任務。 最好的方法是什么?如何使用PHP / mysql?

您可能需要看一下復制(請參閱http://dev.mysql.com/doc/refman/5.4/en/replication-configuration.html )。 這是做到這一點的“正確”方法。 但是,這並不是一件小事,對於較小的表,上述解決方案可能更好(當然也更容易)。

這可能會幫到您,這是我在數據庫上為類似事情所做的工作

    $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);

顯然,您將不得不修改標記和活動表變量。 刪除表格時,這樣做會丟失主鍵,哦..足夠容易添加回來

我建議像已經建議的那樣進行復制。 但是,另一種選擇是使用mysqldump來獲取所需的行並將其發送到另一個表。

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

USERHOSTPASSWORD替換為數據庫的登錄信息。 如果DB1DB2具有不同的訪問信息,則可以為命令的每個部分使用不同的信息。 DB1DB2是數據庫的名稱,而TABLETABLE的名稱。

您也可以修改--where選項以僅獲取需要更新的行。 希望您可以使用一些查詢。 如前所述,如果表具有主鍵,則可以使用以下命令來獲取DB2擁有的最后一個鍵:

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

bash shell腳本(然后在上面的WHERE子句中使用此值)。 根據主鍵的生成方式,這可能不是一個好主意,因為如果行存在,則可能會將行添加到鍵空間的孔中。

如果更改行,只要您有一個可以選擇這些行的查詢,此解決方案也將起作用。 只需將--replace選項添加到mysqldump命令即可。 根據您的情況,最好添加某種類型的值,例如可以用來比較的更新日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM