http://en.wikipedia.org/wiki/Upsert
Sisipkan Perbarui proc yang tersimpan di SQL Server
Apakah ada cara cerdas untuk melakukan ini dalam SQLite yang belum saya pikirkan?
Pada dasarnya saya ingin memperbarui tiga dari empat kolom jika catatan ada, jika tidak ada saya ingin menyisipkan catatan dengan nilai default (NUL) untuk kolom keempat.
ID adalah kunci utama sehingga hanya akan ada satu catatan untuk UPSERT.
(Saya mencoba untuk menghindari overhead SELECT untuk menentukan apakah saya perlu UPDATE atau INSERT jelas)
Saran?
Saya tidak dapat mengonfirmasi Sintaks di situs SQLite untuk TABLE CREATE. Saya belum membuat demo untuk mengujinya, tetapi sepertinya tidak didukung ..
Jika ya, saya memiliki tiga kolom sehingga sebenarnya akan terlihat seperti:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
tetapi dua gumpalan pertama tidak akan menyebabkan konflik, hanya ID akan Jadi saya asusme Blob1 dan Blob2 tidak akan diganti (seperti yang diinginkan)
UPDATE dalam SQLite saat mengikat data adalah transaksi yang lengkap, artinya Setiap baris yang dikirim untuk diperbarui membutuhkan: Mempersiapkan / Mengikat / Melangkah / Menyelesaikan pernyataan tidak seperti INSERT yang memungkinkan penggunaan fungsi reset
Kehidupan objek pernyataan berjalan seperti ini:
- Buat objek menggunakan sqlite3_prepare_v2 ()
- Mengikat nilai ke host parameter menggunakan antarmuka sqlite3_bind_.
- Jalankan SQL dengan memanggil sqlite3_step ()
- Setel ulang pernyataan menggunakan sqlite3_reset () lalu kembali ke langkah 2 dan ulangi.
- Hancurkan objek pernyataan menggunakan sqlite3_finalize ().
PEMBARUAN Saya menduga ini lambat dibandingkan dengan INSERT, tetapi bagaimana cara membandingkannya dengan SELECT menggunakan kunci Utama?
Mungkin saya harus menggunakan pilih untuk membaca kolom ke-4 (Blob3) dan kemudian menggunakan REPLACE untuk menulis catatan baru memadukan Kolom ke-4 asli dengan data baru untuk 3 kolom pertama?