Heim > Fragen und Antworten > Hauptteil
Meine Anwendung fügt möglicherweise doppelte Primärschlüsseldaten ein. Ich bezweifle, was der effizienteste Weg ist, vor dem Einfügen zu prüfen, ob der Schlüssel bereits vorhanden ist, oder einfach einzufügen und die Bank einen Fehler zurückgeben zu lassen und ihn dann zu behandeln? Welches hat weniger Auswirkungen? Danke
P粉3620719922024-03-29 07:32:06
最高效的方法是使用带有 ON DUPLICATE KEY UPDATE
子句的 INSERT
查询。
如果主键不存在,这将插入一条新记录;如果主键已经存在,则仅更新主键记录的指定字段(不会抛出错误)。
例如,如果 user_id
不存在,以下代码将创建一个新用户。如果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 将增加 < code>1 只要主键已经存在。
如果您不想使用 ON DUPLICATE KEY UPDATE
子句,捕获现有主键的错误将是性能最佳的方法。