2011-04-12 103 views
2

我有一個帶有一個主鍵的MySQL表。mysql_affected_rows()在'真實'上返回1 REPLACE INTO

每晚我運行一項作業插入和更新記錄。我爲每個操作使用REPLACE INTO,所以它會添加或替換現有的行。

REPLACE INTO查詢之後,我打電話給mysql_affected_rows(),它對於實際被替換的許多行返回的計數爲1,而不是'new'(對於絕大多數被替換的行返回2)。

我知道這些「插入」中的一些是錯誤的,因爲我跟蹤批量更新開始和結束時的行數;該表沒有重複的數據,加上我已驗證批量更新之前存在的假'新'行。

這張表沒有什麼特別的地方;類似的表的工作原理與使用相同的代碼一樣。任何人有任何想法爲什麼mysql_affected_rows()返回1爲一個真正的替代而不是插入的操作?

回答

2

REPLACE INTO實際上執行DELETE,然後是INSERT,而不是UPDATE。

您可能需要考慮使用INSERT ... ON DUPLICATE KEY UPDATE語法。

+0

我知道,如果行已經存在,那麼REPLACE會執行刪除/插入操作,這就是我難倒了 - 爲什麼mysql_affected_rows()返回1時,顯然應該返回2?正如我所提到的,這段代碼在一個相同的表上工作,所以我迷失了,試圖找出爲什麼mysql_affected_rows()返回1. 我可以使用ON DUPLICATE,但會需要所有的列和值標籤兩次 - 一次用於INSERT INTO&for ON DUPLICATE。有600多列,這是很多。我可以計算列之間的變化,但這需要做一個SELECT,從而在第一個地方擊敗了使用REPLACE的點。 – 2011-04-13 16:51:54