Bagaimana untuk melaksanakan operasi "masukkan jika tidak wujud" dalam MySQL?
P粉005105443
2023-08-29 10:59:40
<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>
Penyelesaian:
Arahan:
Pertanyaan paling dalam
digunakan sebagai
WHERE NOT EXISTS
条件,检测是否已存在包含要插入数据的行。找到此类的一行后,查询可能会停止,因此LIMIT 1
(pengoptimuman mikro, boleh diabaikan).Pertanyaan perantaraan
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
Masukkan data (jika pertanyaan perantaraan mengembalikan sebarang data).
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: