Maison > Questions et réponses > le corps du texte
Mon application peut insérer des données de clé primaire en double, mon doute est de savoir quel est le moyen le plus efficace de vérifier si la clé existe déjà avant l'insertion, ou simplement d'insérer et de laisser la banque renvoyer une erreur puis de la gérer ? Lequel a le moins d’impact ? Merci
P粉3620719922024-03-29 07:32:06
Le moyen le plus efficace est d'utiliser une requête avec ON DUPLICATE KEY UPDATE
子句的 INSERT
.
Si la clé primaire n'existe pas, cela insérera un nouvel enregistrement ; si la clé primaire existe déjà, seul le champ spécifié de l'enregistrement de clé primaire sera mis à jour (aucune erreur ne sera générée).
Par exemple, si 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)
Cette approche vous permet de créer de nouveaux enregistrements et de mettre à jour les enregistrements existants avec une seule requête, éliminant ainsi le besoin de vérifier les clés primaires existantes.
Remarque : si la clé primaire est un index à incrémentation automatique, MySQL le fera ON DUPLICATE UPDATE
子句视为与 INSERT
查询相同,因此下一个 ID 将增加 < code>1 tant que la clé primaire existe déjà.
Si vous ne souhaitez pas utiliser la clause ON DUPLICATE KEY UPDATE
, détecter les erreurs sur les clés primaires existantes sera l'approche la plus performante.