Rumah >pangkalan data >tutorial mysql >Bagaimanakah UPSERT SQLite Mengendalikan Kemas Kini Separa dan Sisipan dengan Cekap?
Memahami Fungsi UPSERT SQLite
Operasi UPSERT, gabungan INSERT dan UPDATE, mengendalikan pengubahsuaian data dengan cekap dengan mengemas kini rekod sedia ada atau memasukkan rekod baharu mengikut keperluan. Walaupun SQLite menyokong UPSERT secara langsung, mengoptimumkan penggunaannya untuk kemas kini separa memerlukan pertimbangan yang teliti.
Sintaks UPSERT SQLite
Diperkenalkan dalam SQLite versi 3.24.0, klausa ON CONFLICT
membolehkan kawalan UPSERT yang tepat. Contohnya:
<code class="language-sql">INSERT OR REPLACE INTO table (id, name) VALUES (1, 'John Foo') ON CONFLICT(id) DO UPDATE SET name = 'John Foo';</code>
Ini mengemas kini medan name
jika rekod dengan padanan id
wujud; jika tidak, ia memasukkan baris baharu.
Mengatasi Kemas Kini Separa
Menguruskan kemas kini separa—mengubah suai lajur tertentu sahaja sambil membiarkan yang lain tidak disentuh—membawakan cabaran. Pertimbangkan senario ini: kemas kini Blob1
dan Blob2
, tetapi biarkan Blob3
tidak berubah jika rekod wujud; jika tidak, tetapkan Blob3
kepada NULL.
Penyelesaian Kemas Kini Separa yang Cekap
Klausa ON CONFLICT
menyediakan penyelesaian yang elegan:
<code class="language-sql">INSERT INTO table (id, Blob1, Blob2, Blob3) VALUES (1, 'Data1', 'Data2', NULL) ON CONFLICT(id) DO UPDATE SET Blob1 = 'Data1', Blob2 = 'Data2';</code>
Pendekatan ini hanya mengemas kini Blob1
dan Blob2
apabila konflik (padanan id
) berlaku. Yang penting, jika rekod tiada, INSERT
menetapkan Blob3
kepada NULL seperti yang dinyatakan.
Kaedah Alternatif (Kurang Cekap)
Sebagai alternatif, gabungan SELECT
dan REPLACE
boleh mencapai hasil yang sama:
<code class="language-sql">SELECT name INTO @name FROM Employee WHERE id = 1; REPLACE INTO Employee (id, role) VALUES (1, 'code monkey', @name);</code>
Ini mengekalkan nilai name
asal dengan membacanya terlebih dahulu. Walau bagaimanapun, kaedah ini secara amnya memperkenalkan lebih banyak overhed berbanding pendekatan ON CONFLICT
.
Atas ialah kandungan terperinci Bagaimanakah UPSERT SQLite Mengendalikan Kemas Kini Separa dan Sisipan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!