Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan INSERT MySQL ON DUPLICATE KEY UPDATE dalam SQLite?
Mensimulasikan MySQL INSERT ON DUPLICATE KEY UPDATE dalam SQLite: Panduan Lengkap
Pangkalan data perhubungan selalunya perlu mengemas kini rekod apabila ia sudah wujud, atau memasukkan rekod baharu apabila ia tidak wujud. Dalam MySQL, kefungsian ini boleh dicapai menggunakan sintaks INSERT ... ON DUPLICATE KEY UPDATE, yang menyediakan cara yang mudah untuk menggabungkan operasi sisipan dan kemas kini.
Walau bagaimanapun, SQLite tidak menyokong sintaks ini secara asli. Oleh itu, cara alternatif untuk mencapai kesan yang sama dalam SQLite mesti diterokai.
Salah satu cara ialah menggunakan SELECT digabungkan dengan pertanyaan INSERT atau UPDATE. Ini melibatkan terlebih dahulu melaksanakan pertanyaan SELECT untuk menyemak sama ada rekod dengan kunci unik yang sama (cth. alamat IP) wujud. Jika ia wujud, lakukan pertanyaan KEMASKINI untuk menambah lajur hits. Jika ia tidak wujud, pertanyaan INSERT dilaksanakan untuk mencipta rekod baharu.
Sebagai alternatif, anda boleh menggabungkan pertanyaan KEMASKINI dan INSERT. Di sini, pertanyaan KEMASKINI mula-mula dilaksanakan, cuba menambah lajur hits untuk alamat IP tertentu. Jika berjaya, rekod wujud dan operasi selesai. Jika UPDATE gagal (kerana rekod tidak wujud), pertanyaan INSERT dilaksanakan untuk mencipta rekod baharu.
Kedua-dua kaedah memerlukan kekangan unik (atau kunci utama) pada lajur yang berkaitan (cth. ip).
Satu lagi penyelesaian yang berkesan ialah menggunakan pernyataan berikut:
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip = $ip;</code>
Kaedah ini melibatkan penggunaan pernyataan INSERT OR IGNORE untuk cuba memasukkan rekod baharu. Klausa IGNORE menghalang ralat daripada dibangkitkan jika rekod sudah wujud. Kenyataan KEMASKINI yang berikutnya cuba menambah lajur hits untuk alamat IP tertentu. Jika UPDATE berjaya, bermakna rekod telah berjaya dikemas kini. Jika gagal, ini bermakna rekod tidak wujud dan kenyataan INSERT menciptanya. Ambil perhatian bahawa LIKE
telah ditukar kepada =
untuk memastikan padanan alamat IP yang tepat.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan INSERT MySQL ON DUPLICATE KEY UPDATE dalam SQLite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!