84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我的应用程序可能会插入重复的主键数据,我的疑问是最有效的方法是什么,在插入之前检查键是否已经存在,或者只是插入并让银行返回错误然后处理它?哪个影响较小? 谢谢
最高效的方法是使用带有 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
子句,捕获现有主键的错误将是性能最佳的方法。