2011-06-16 26 views
0

我創建了一個更改日誌數據庫,它與我的活動數據庫完全相同,除了它在末尾具有更改的DATE字段。從一個表插入所有行到另一個+時間戳在結尾

數據庫基本上是一個主鍵ID和大約50個其他各種數據類型的列。我在php中使用的腳本是它試圖插入新的ID,如果它獲得重複主鍵的錯誤消息,那麼它應該得到該行,將它作爲最終日期值插入到我的備份數據庫中,並使用curdate()調用,從我的第一個數據庫刪除條目,然後插入新條目。

我已經完成了腳本的所有其他部分,除了必須插入第一個表中的所有內容+ curdate()的額外列之外的部分。或者,如果我有一個更好的解決方案,當存在相當多的行時,如果有重複的主鍵進入備份數據庫,請分享它。

+0

可以顯示一些代碼?如果您正在覆蓋數據庫中現有的Cols集,則需要使用UPDATE,而不是INSERT,否則將失敗。至於當前日期,你可以在你的mysql查詢中使用「NOW()」 – John 2011-06-16 14:25:52

+0

你的意思是刪除並插入代碼?它只是從表中刪除id = someid,然後插入表值(等等)更新的一個問題是,我不知道如何更新所有列而不明確聲明所有的名稱。 – NorthGuard 2011-06-16 14:37:14

+0

我相信你可以有一個時間戳類型的字段,它會自動獲取當前的時間戳,如果你將NULL傳遞給它,我在4年左右沒有使用MySQL,所以我不知道 – 2011-06-16 14:38:26

回答

3

你可以做一個INSERT INTO SELECT:

INSERT INTO `backupTable` SELECT *, NOW() FROM `originalTable` WHERE id = '$id'; 

您必須指定ID爲要複製到備份數據庫的條目。 您還必須確定, ID尚未存在於您的備份表中。您可以使用 REPLACE INTO來解決這種情況。

REPLACE INTO `backupTable` SELECT *, NOW() FROM `originalTable` WHERE id = '$id'; 

+0

哦,忘了提及備份表的ID不是主鍵,因爲它不僅僅是備份表的更改日誌,我只需要知道什麼時候有新內容進入。插入應該沒問題吧? – NorthGuard 2011-06-16 14:41:40

+0

插入很好。 – DanielB 2011-06-16 14:42:20

2

基本上,您可以創建一個TIMESTAMP列,其中CURRENT_TIMESTAMP作爲默認值。 當您向該表中插入一行時,將自動插入當前日期/時間。 是你在找什麼?

BTW:我會建議它源殺人的問題,並確保重複的主鍵將不會被插入到DataTable .. 要做到這一點,你可以使用SELECT LAST_INSERT_ID();

+0

或只是使用自動增量。 ... – Flukey 2011-06-16 14:50:59

+0

謝謝,這兩種解決方案的工作,雖然我想要做的是,如果重複的ID進來,如果它不同,然後插入到更改日誌等 – NorthGuard 2011-06-16 15:00:44

+0

你正在處理重複的ID作爲錯誤,而在第一位它應該沒有重複。 – Dementic 2011-06-16 15:41:55

相關問題