MySQL存在則更新方法一般有以下幾種
- SELECT + UPDATE
- REPLACE INTO
- INSERT INTO … ON DUPLICATE KEY UPDATE
SELECT + UPDATE 是最傳統的一個,要對數據庫進行兩次操作。
REPLACE INTO 和 INSERT INTO ON DUPLICATE KEY UPDATE都是一次操作,表面看起來功能差不多,REPLACE INTO 還優勝些,因爲要短一些。
但是兩者還是有點區別的:
REPLACE INTO 等於 DELETE + INSERT INTO,如果表的主鍵是一個自增ID,那問題就來了,REPLACE INTO 會導致主鍵的值越來越大,如果溢出,將會導致數據無法插入。
而INSERT INTO ON DUPLICATE KEY UPDATE的實質卻是 if(EXISTS) UPDATE else INSERT INTO 的操作。
兩者的效率都不怎麼樣,道理很簡單,因爲一個人幹了兩個人的活嘛。