Từ câu hỏi thường gặp về SQLite tôi đã biết rằng:
Nhiều quy trình có thể có cùng một cơ sở dữ liệu mở cùng một lúc. Nhiều quy trình có thể được thực hiện
SELECT
cùng một lúc. Tuy nhiên, chỉ có một quá trình có thể thực hiện thay đổi cơ sở dữ liệu bất cứ lúc nào.
Vì vậy, như xa như tôi hiểu rằng tôi có thể: 1) đọc db từ nhiều chủ đề ( SELECT
) 2) đọc db từ nhiều chủ đề ( SELECT
) và write từ sợi đơn ( CREATE
, INSERT
, DELETE
)
Nhưng, tôi đã đọc về Ghi nhật ký Viết trước cung cấp nhiều đồng thời hơn vì người đọc không chặn nhà văn và nhà văn không chặn người đọc . Đọc và viết có thể tiến hành đồng thời.
Cuối cùng, tôi đã hoàn toàn nhầm lẫn khi tôi tìm thấy nó , khi được chỉ định:
Dưới đây là các lý do khác để nhận lỗi SQLITE_LOCKED:
- Đang cố gắng
CREATE
hoặcDROP
một bảng hoặc chỉ mục trong khi mộtSELECT
câu lệnh vẫn đang chờ xử lý.- Cố gắng ghi vào bảng trong khi a
SELECT
đang hoạt động trên cùng bảng đó.- Cố gắng thực hiện hai cái
SELECT
trên cùng một bảng trong cùng một ứng dụng đa luồng, nếu sqlite không được đặt để làm như vậy.- fcntl (3, cuộc gọi F_SETLK trên tệp DB không thành công. Ví dụ, điều này có thể do sự cố khóa NFS. Một giải pháp cho vấn đề này là mv DB đi và sao chép lại để nó có giá trị Inode mới
Vì vậy, tôi muốn làm rõ cho mình, có cần tránh khóa không? Tôi có thể đọc và viết cùng một lúc từ hai chủ đề khác nhau không? Cảm ơn.
isolation_level=None
mặc dù. Không có chế độ bộ đệm chia sẻ, làm thế nào để tôi chia sẻ phiên bản giữa các luồng?