Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencontohi KEMASKINI KUNCI PENDUPLICATE MySQL dengan Cekap dalam SQLite?

Bagaimana untuk Mencontohi KEMASKINI KUNCI PENDUPLICATE MySQL dengan Cekap dalam SQLite?

Linda Hamilton
Linda Hamiltonasal
2025-01-15 14:09:43485semak imbas

How to Efficiently Emulate MySQL's ON DUPLICATE KEY UPDATE in SQLite?

Mensimulasikan MySQL ON DUPLICATE KEY UPDATE dalam SQLite

SQLite tidak mempunyai persamaan langsung klausa ON DUPLICATE KEY UPDATE MySQL, yang membolehkan kemas kini yang cekap dan sisipan rekod dengan kekangan unik yang telah ditetapkan. Walau bagaimanapun, kesan yang sama boleh dicapai melalui kaedah alternatif.

Kaedah alternatif

Untuk mensimulasikan upsert dalam SQLite, terdapat dua kaedah utama yang boleh anda gunakan:

  1. PILIH (MASUKKAN atau KEMASKINI):

    • Lakukan pertanyaan PILIH untuk menyemak sama ada rekod itu wujud.
    • Jika rekod wujud, laksanakan pertanyaan KEMASKINI untuk menambah lajur hits.
    • Jika rekod tidak wujud, laksanakan pertanyaan INSERT untuk mencipta rekod.
  2. KEMASKINI (MASUKKAN jika KEMASKINI gagal):

    • Cuba laksanakan pertanyaan KEMASKINI untuk menambah lajur hits bagi rekod sedia ada.
    • Jika pertanyaan KEMASKINI gagal kerana rekod tidak wujud, laksanakan pertanyaan INSERT untuk mencipta rekod.

Kaedah yang disyorkan

Kedua-dua kaedah mempunyai kebaikan dan keburukan, tetapi kaedah kedua (menggunakan KEMASKINI (atau INSERT jika KEMASKINI gagal)) secara amnya lebih cekap. Ia hanya memerlukan satu operasi pangkalan data dan mengelakkan pertanyaan SELECT yang tidak perlu.

Coretan kod yang dicadangkan

Berikut ialah coretan kod yang dicadangkan untuk melaksanakan pendekatan kedua menggunakan kekangan unik pada lajur "ip":

<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>

Sebagai alternatif, coretan kod berikut daripada penyelesaian Stack Overflow yang lain menyediakan satu lagi pelaksanaan upsert yang berfungsi:

<code class="language-sql">INSERT INTO visits (ip, hits)
VALUES ($ip, COALESCE((SELECT hits FROM visits WHERE ip LIKE $ip), 0) + 1);</code>

Atas ialah kandungan terperinci Bagaimana untuk Mencontohi KEMASKINI KUNCI PENDUPLICATE MySQL dengan Cekap dalam SQLite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn