Wie implementiert man die Operation „Einfügen, wenn nicht vorhanden' in MySQL?
P粉005105443
P粉005105443 2023-08-29 10:59:40
0
2
518
<p>Ich habe diesen Artikel zum ersten Mal über eine Google-Suche gefunden, <em>So schreibe ich eine INSERT if NOT EXISTS-Abfrage in Standard-SQL</em>, in dem Mutex-Tabellen behandelt werden. </p> <p>Ich habe eine Tabelle mit etwa 14 Millionen Datensätzen. Wenn ich weitere Daten im gleichen Format hinzufügen möchte, gibt es eine Möglichkeit sicherzustellen, dass der Datensatz, den ich einfügen möchte, nicht vorhanden ist, ohne ein Abfragepaar zu verwenden (d. h. eine zu prüfende Abfrage und eine einzufügende Abfrage mit dem Ergebnissatz). ist leer)? </p> Garantiert die <code>unique</code>-Einschränkung für das <p>-Feld, dass <code>insert</code> fehlschlägt? </p> <p>Sieht so aus, als ob <em> nur eine Einschränkung ist und wenn ich die Einfügung über PHP ausführe, klappert das Skript. </p>
P粉005105443
P粉005105443

Antworte allen(2)
P粉338969567

解决方案:

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)

说明:

最里面的查询

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

用作WHERE NOT EXISTS条件,检测是否已存在包含要插入数据的行。找到此类的一行后,查询可能会停止,因此LIMIT 1(微优化,可以省略)。

中间查询

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

代表要插入的值。 DUAL 是指所有 Oracle 数据库中默认存在的一种特殊的单行单列表(请参阅 https://en.wikipedia.org/wiki/DUAL_table)。在 MySQL-Server 版本 5.7.26 上,当省略 FROM DUAL 时,我得到了有效的查询,但旧版本(如 5.5.60)似乎需要 FROM 信息。通过使用 WHERE NOT EXISTS,如果最里面的查询找到匹配的数据,中间查询将返回一个空结果集。

外部查询

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

插入数据(如果中间查询返回任何数据)。

P粉521013123

使用INSERT IGNORE INTO table

还有 INSERT … ON DUPLICATE KEY UPDATE 语法,您可以在 13.2.6.2 INSERT ... ON DUPLICATE KEY UPDATE 语句


来自 bogdan 的帖子.org.ua 根据Google 的网络缓存

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!