2013-02-07 60 views
3

我正在爲我的網站使用mysql REPLACE INTO語法。下面是我的測試表結構,在mysql中指定id替換爲

id name address 
1 Tom US 
2 Dick UK 
3 Harry US 
4 Jony Spain 

查詢:

REPLACE INTO table_name VALUES (3, 'Roni', 'India') 

現在執行這個查詢mysql的話說,

2行(S)的影響。 插入的行ID:4(查詢花了0.0003秒)

有人可以解釋我上面提到的文字是什麼意思? Whay 2行受影響

問候

+0

可以用你下面的語法 重寫查詢REPLACE INTO

...)VALUES( ... ) – DevelopmentIsMyPassion

+0

當您使用Replace查詢時,還會得到什麼輸出? – DevelopmentIsMyPassion

+0

REPLACE語句首先刪除具有相同主鍵的記錄,然後插入新記錄。該函數返回已刪除記錄的數量加上插入記錄的數量。 –

回答

2

兩行,因爲受影響的REPLACE INTO將做刪除,然後就等你結了2次運算,首先刪除(1行受影響)的主要衝突的INSERT然後在插入(第2行受影響)。

您可能想考慮其他解決方案,因爲需要更新索引,所以DELETE的成本很高。在很多情況下,基於DUPLICATE KEY UPDATE的INSERT ...會更快。

+0

我的表中的「id」字段是自動增量字段,當我運行查詢時,id保持不變[即3] ...但根據你它是第一次刪除,然後插入一個新的行。你能告訴我爲什麼自動增量剛停止工作嗎? 你寫道:「自從索引需要更新以來,DELETE代價高昂」 - 這是否意味着整個索引已更新爲表? –

+0

它不會自動遞增,因爲您明確指定了id的值 - 如果您沒有爲其指定特定值,該值只會自動遞增。如果您嘗試在爲ID指定值(例如:INSERT INTO table_name(600,'Roni','India'))時嘗試做一個普通的舊插入,則該行將插入並且下一個自動遞增值將爲601. – shannonman

+0

ok。 ...謝謝...所以這就是我的表發生了什麼......在運行查詢後,更新了id 3的字段,並且當我插入一個新行時,自動遞增id變爲5.因此,刪除和重新插入過程[即REPLACE]完全不影響表索引。這就是爲什麼我很驚訝,並問了這個問題。對不起,我英文很差。 –

0

使用這樣的查詢:

EXPLAIN REPLACE INTO table_name VALUES (3, 'Roni', 'India') 

通知將 「解釋」 的關鍵字!這樣MySQL就會解釋發生了什麼事情。

但是請注意,REPLACE INTO與INSERT INTO相同,但如果存在則會替換該行,如果不存在則插入它。所以,如果存在,它將刪除該行,然後插入新行,這就是爲什麼您有兩行受到影響。

+0

解釋不處理這個查詢。 ..這是給sql錯誤 –

+0

什麼是錯誤? – Siki

+0

它是,**#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在第1行的REPLACE INTO table_name VALUES(3,'Roni','India')'附近使用** –

1

MySQL的REPLACE像UPDATE語句如下:

REPLACE INTO table_name SET column_name1 = value1 AND column2 = value2 
0

你的情況,它看起來喜歡編號3是刪除,然後重新插入。這就是爲什麼它說2個記錄受到影響。你的表可能有第3行,羅尼和印度插入和刪除的行3,哈利,美國