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行受影響?
問候
可以用你下面的語法 重寫查詢REPLACE INTO
(當您使用Replace查詢時,還會得到什麼輸出? – DevelopmentIsMyPassion
REPLACE語句首先刪除具有相同主鍵的記錄,然後插入新記錄。該函數返回已刪除記錄的數量加上插入記錄的數量。 –
回答
兩行,因爲受影響的REPLACE INTO將做刪除,然後就等你結了2次運算,首先刪除(1行受影響)的主要衝突的INSERT然後在插入(第2行受影響)。
您可能想考慮其他解決方案,因爲需要更新索引,所以DELETE的成本很高。在很多情況下,基於DUPLICATE KEY UPDATE的INSERT ...會更快。
來源
2013-02-07 08:44:32 shannonman
我的表中的「id」字段是自動增量字段,當我運行查詢時,id保持不變[即3] ...但根據你它是第一次刪除,然後插入一個新的行。你能告訴我爲什麼自動增量剛停止工作嗎? 你寫道:「自從索引需要更新以來,DELETE代價高昂」 - 這是否意味着整個索引已更新爲表? –
它不會自動遞增,因爲您明確指定了id的值 - 如果您沒有爲其指定特定值,該值只會自動遞增。如果您嘗試在爲ID指定值(例如:INSERT INTO table_name(600,'Roni','India'))時嘗試做一個普通的舊插入,則該行將插入並且下一個自動遞增值將爲601. – shannonman
ok。 ...謝謝...所以這就是我的表發生了什麼......在運行查詢後,更新了id 3的字段,並且當我插入一個新行時,自動遞增id變爲5.因此,刪除和重新插入過程[即REPLACE]完全不影響表索引。這就是爲什麼我很驚訝,並問了這個問題。對不起,我英文很差。 –
使用這樣的查詢:
通知將 「解釋」 的關鍵字!這樣MySQL就會解釋發生了什麼事情。
但是請注意,REPLACE INTO與INSERT INTO相同,但如果存在則會替換該行,如果不存在則插入它。所以,如果存在,它將刪除該行,然後插入新行,這就是爲什麼您有兩行受到影響。
來源
2013-02-07 08:48:45 Siki
解釋不處理這個查詢。 ..這是給sql錯誤 –
什麼是錯誤? – Siki
它是,**#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在第1行的REPLACE INTO table_name VALUES(3,'Roni','India')'附近使用** –
MySQL的REPLACE像UPDATE語句如下:
來源
2013-02-07 08:55:13
你的情況,它看起來喜歡編號3是刪除,然後重新插入。這就是爲什麼它說2個記錄受到影響。你的表可能有第3行,羅尼和印度插入和刪除的行3,哈利,美國
來源
2013-02-07 09:00:58 DevelopmentIsMyPassion
相關問題