MySQL的Replace into 與Insert into ..... on duplicate

(1),沒有key的時候,replace與insert .. on deplicate udpate相同。
(2),有key的時候,都保留主鍵值,而且auto_increment自動+1
不一樣之處:有key的時候,replace是delete老記錄,而錄入新的記錄,因此原有的全部記錄會被清除,這個時候,若是replace語句的字段不全的話,有些原有的好比例子中c字段的值會被自動填充爲默認值。
     而insert .. deplicate update則只執行update標記以後的sql,從表象上來看至關於一個簡單的update語句。
     可是實際上,根據我推測,若是是簡單的update語句,auto_increment不會+1,應該也是先delete,再insert的操做,只是在insert的過程當中保留除update後面字段之外的全部字段的值。
 
因此二者的區別只有一個,insert .. on deplicate udpate保留了全部字段的舊值,再覆蓋而後一塊兒insert進去,而replace沒有保留舊值,直接刪除再insert新值。
從底層執行效率上來說,replace要比insert .. on deplicate update效率要高,可是在寫replace的時候,字段要寫全,防止老的字段數據被刪除。sql

相關文章
相關標籤/搜索