Wie implementiert man die Operation „Einfügen, wenn nicht vorhanden' in MySQL?
P粉005105443
P粉005105443 2023-08-29 10:59:40
0
2
442

Ich habe diesen Artikel zum ersten Mal über eine Google-Suche gefunden, So schreibe ich eine INSERT if NOT EXISTS-Abfrage in Standard-SQL, in dem Mutex-Tabellen behandelt werden.

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)?

Garantiert die unique-Einschränkung für das

-Feld, dass insert fehlschlägt?

Sieht so aus, als ob nur eine Einschränkung ist und wenn ich die Einfügung über PHP ausführe, klappert das Skript.

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 的网络缓存

      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!