http://en.wikipedia.org/wiki/Upsert
Chèn Cập nhật Proc được lưu trữ trên SQL Server
Có một số cách thông minh để làm điều này trong SQLite mà tôi chưa nghĩ đến?
Về cơ bản tôi muốn cập nhật ba trong bốn cột nếu bản ghi tồn tại, Nếu nó không tồn tại tôi muốn XÁC NHẬN bản ghi với giá trị mặc định (NUL) cho cột thứ tư.
ID là khóa chính vì vậy sẽ chỉ có một bản ghi cho UPSERT.
(Tôi đang cố gắng tránh chi phí hoạt động của CHỌN để xác định xem tôi có cần CẬP NHẬT hay CHERTN rõ ràng không)
Gợi ý?
Tôi không thể xác nhận rằng Cú pháp trên trang SQLite cho TABLE CREATE. Tôi chưa xây dựng bản demo để kiểm tra, nhưng có vẻ như nó không được hỗ trợ ..
Nếu có, tôi có ba cột để nó thực sự trông như sau:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
nhưng hai đốm màu đầu tiên sẽ không gây ra xung đột, chỉ có ID nên tôi sẽ thay thế Blob1 và Blob2 (như mong muốn)
CẬP NHẬT trong SQLite khi dữ liệu ràng buộc là một giao dịch hoàn chỉnh, có nghĩa là mỗi hàng đã gửi được cập nhật yêu cầu: Chuẩn bị / Bind / Step / Hoàn thiện các câu lệnh không giống như INSERT cho phép sử dụng chức năng đặt lại
Cuộc sống của một đối tượng tuyên bố đi như thế này:
- Tạo đối tượng bằng sqlite3_prepare_v2 ()
- Ràng buộc các giá trị để lưu trữ các tham số bằng các giao diện sqlite3_bind_.
- Chạy SQL bằng cách gọi sqlite3_step ()
- Đặt lại câu lệnh bằng sqlite3_reset () sau đó quay lại bước 2 và lặp lại.
- Tiêu diệt đối tượng câu lệnh bằng sqlite3_finalize ().
CẬP NHẬT Tôi đoán là chậm so với INSERT, nhưng làm thế nào để so sánh với CHỌN bằng cách sử dụng khóa Chính?
Có lẽ tôi nên sử dụng lựa chọn để đọc cột thứ 4 (Blob3) và sau đó sử dụng REPLACE để viết một bản ghi mới pha trộn Cột thứ 4 ban đầu với dữ liệu mới cho 3 cột đầu tiên?