Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk melaksanakan operasi "masukkan jika tidak wujud" dalam MySQL?

<p>Saya mula-mula menemui artikel ini melalui carian Google, <em>Cara menulis pertanyaan INSERT if NOT EXISTS dalam SQL standard</em>, yang membincangkan jadual mutex. </p> <p>Saya mempunyai jadual dengan kira-kira 14 juta rekod. Jika saya ingin menambah lebih banyak data dalam format yang sama, adakah terdapat cara untuk memastikan rekod yang saya ingin masukkan tidak wujud tanpa menggunakan sepasang pertanyaan (iaitu satu pertanyaan untuk diperiksa dan satu pertanyaan untuk dimasukkan, dengan set keputusan kosong)? </p> Adakah <kod>unik</kod> pada medan <p>menjamin bahawa <kod>masukkan</kod> </p> <p>Nampaknya <em> hanyalah kekangan, dan apabila saya mengeluarkan sisipan melalui PHP, skripnya berdering. </p>
P粉005105443P粉005105443418 hari yang lalu503

membalas semua(2)saya akan balas

  • P粉338969567

    P粉3389695672023-08-30 10:05:32

    Penyelesaian:

    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)

    Arahan:

    Pertanyaan paling dalam

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

    digunakan sebagai WHERE NOT EXISTS条件,检测是否已存在包含要插入数据的行。找到此类的一行后,查询可能会停止,因此LIMIT 1 (pengoptimuman mikro, boleh diabaikan).

    Pertanyaan perantaraan

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

    mewakili nilai yang akan dimasukkan. DUAL 是指所有 Oracle 数据库中默认存在的一种特殊的单行单列表(请参阅 https://en.wikipedia.org/wiki/DUAL_table)。在 MySQL-Server 版本 5.7.26 上,当省略 FROM DUAL 时,我得到了有效的查询,但旧版本(如 5.5.60)似乎需要 FROM 信息。通过使用 WHERE NOT EXISTS, jika pertanyaan paling dalam menemui data yang sepadan, pertanyaan tengah akan mengembalikan set hasil kosong.

    Pertanyaan luaran

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

    Masukkan data (jika pertanyaan perantaraan mengembalikan sebarang data).

    balas
    0
  • P粉521013123

    P粉5210131232023-08-30 00:40:11

    Gunakan INSERT IGNORE INTO table.

    Terdapat juga INSERT … ON DUPLICATE KEY UPDATE sintaks yang anda boleh gunakan dalam 13.2.6.2 INSERT ... PADA penyataan KEMASKINI KUNCI DUA .


    Siaran daripada bogdan.org.ua Berdasarkan cache web Google:

    balas
    0
  • Batalbalas