Comment implémenter l'opération « insérer s'il n'existe pas » dans MySQL ?
P粉005105443
P粉005105443 2023-08-29 10:59:40
0
2
538
<p>J'ai trouvé cet article pour la première fois grâce à une recherche Google, <em>Comment écrire une requête INSERT if NOT EXISTS en SQL standard</em>, qui traite des tables mutex. </p> <p>J'ai une table contenant environ 14 millions d'enregistrements. Si je souhaite ajouter plus de données dans le même format, existe-t-il un moyen de garantir que l'enregistrement que je souhaite insérer n'existe pas sans utiliser une paire de requêtes (c'est-à-dire une requête à vérifier et une requête à insérer, avec le jeu de résultats est vide)? </p> La contrainte <code>unique</code> sur le champ <p> garantit-elle que <code>insert</code> </p> <p>On dirait que <em> est juste </em> une contrainte, et lorsque j'émets l'insertion via PHP, le script tremble. </p>
P粉005105443
P粉005105443

répondre à tous(2)
P粉338969567

Solution :

INSERT INTO `table` (`value1`, `value2`) 
SELECT 'stuff for value1', 'stuff for value2' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM `table` 
      WHERE `value1`='stuff for value1' AND `value2`='stuff for value2' LIMIT 1)

Instructions :

La requête la plus intime

SELECT * FROM `table` 
      WHERE `value1`='stuff for value1' AND `value2`='stuff for value2' LIMIT 1

est utilisé comme WHERE NOT EXISTS条件,检测是否已存在包含要插入数据的行。找到此类的一行后,查询可能会停止,因此LIMIT 1 (micro-optimisation, peut être omis).

Requête intermédiaire

SELECT 'stuff for value1', 'stuff for value2' FROM DUAL

représente la valeur à insérer. DUAL 是指所有 Oracle 数据库中默认存在的一种特殊的单行单列表(请参阅 https://en.wikipedia.org/wiki/DUAL_table)。在 MySQL-Server 版本 5.7.26 上,当省略 FROM DUAL 时,我得到了有效的查询,但旧版本(如 5.5.60)似乎需要 FROM 信息。通过使用 WHERE NOT EXISTS, si la requête la plus interne trouve des données correspondantes, la requête du milieu renverra un ensemble de résultats vide.

Requête externe

INSERT INTO `table` (`value1`, `value2`)

Insérer des données (si la requête intermédiaire renvoie des données).

P粉521013123

Utilisez INSERT IGNORE INTO table.

Il existe également une syntaxe INSERT … ON DUPLICATE KEY UPDATE que vous pouvez utiliser dans l'instruction 13.2.6.2 INSERT ... ON DUPLICATE KEY UPDATE .


Post de bogdan.org.ua Basé sur le cache Web de Google :

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal