我的應用程式可能會插入重複的主鍵數據,我的疑問是最有效的方法是什麼,在插入之前檢查鍵是否已經存在,或者只是插入並讓銀行返回錯誤然後處理它?哪個影響較小? 謝謝
最有效率的方法是使用帶有 ON DUPLICATE KEY UPDATE 子句的 INSERT 查詢。
ON DUPLICATE KEY UPDATE
INSERT
如果主鍵不存在,這將插入一條新記錄;如果主鍵已經存在,則僅更新主鍵記錄的指定欄位(不會拋出錯誤)。
例如,如果 user_id 不存在,以下程式碼將建立一個新使用者。如果user_id確實存在,它只會更新last_visited_date。
user_id
last_visited_date
INSERT INTO users (user_id, last_visited_date) VALUES ({user_id}, UTC_TIMESTAMP()) ON DUPLICATE KEY UPDATE last_visited_date= VALUES(last_visited_date)
這種方法可讓您透過一個查詢建立新記錄並更新現有記錄,從而無需檢查現有主鍵。
注意:如果主鍵是自增索引,MySQL 將ON DUPLICATE UPDATE 子句視為與INSERT 查詢相同,因此下一個ID 會增加#1 只要主鍵已經存在。
ON DUPLICATE UPDATE
如果您不想使用 ON DUPLICATE KEY UPDATE 子句,捕獲現有主鍵的錯誤將是效能最佳的方法。
最有效率的方法是使用帶有
ON DUPLICATE KEY UPDATE
子句的INSERT
查詢。如果主鍵不存在,這將插入一條新記錄;如果主鍵已經存在,則僅更新主鍵記錄的指定欄位(不會拋出錯誤)。
例如,如果
user_id
不存在,以下程式碼將建立一個新使用者。如果user_id
確實存在,它只會更新last_visited_date
。這種方法可讓您透過一個查詢建立新記錄並更新現有記錄,從而無需檢查現有主鍵。
注意:如果主鍵是自增索引,MySQL 將
ON DUPLICATE UPDATE
子句視為與INSERT
查詢相同,因此下一個ID 會增加#1 只要主鍵已經存在。如果您不想使用
ON DUPLICATE KEY UPDATE
子句,捕獲現有主鍵的錯誤將是效能最佳的方法。