[英]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
將USER
, HOST
和PASSWORD
替換為數據庫的登錄信息。 如果DB1
和DB2
具有不同的訪問信息,則可以為命令的每個部分使用不同的信息。 DB1
和DB2
是數據庫的名稱,而TABLE
是TABLE
的名稱。
您也可以修改--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.