จากคำถามที่พบบ่อย SQLite ฉันรู้ว่า:
กระบวนการหลายอย่างสามารถเปิดฐานข้อมูลเดียวกันได้ในเวลาเดียวกัน กระบวนการหลายอย่างสามารถทำได้
SELECT
ในเวลาเดียวกัน อย่างไรก็ตามมีเพียงกระบวนการเดียวเท่านั้นที่สามารถเปลี่ยนแปลงฐานข้อมูลได้ทุกเวลา
ดังนั้นเท่าที่ผมเข้าใจว่าฉันสามารถ: 1) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT
) 2) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT
) และเขียนจากหัวข้อเดียว ( CREATE
, INSERT
, DELETE
)
แต่ผมอ่านเกี่ยวกับการเขียนล่วงหน้าล็อกที่ให้ความเห็นพ้องมากขึ้นขณะที่ผู้อ่านไม่ปิดกั้นนักเขียนและนักเขียนจะไม่ปิดกั้นผู้อ่าน การอ่านและการเขียนสามารถดำเนินไปพร้อม ๆ กัน
ในที่สุดฉันก็สับสนงงเมื่อฉันพบมันเมื่อมีการระบุ:
นี่คือเหตุผลอื่น ๆ สำหรับการรับข้อผิดพลาด SQLITE_LOCKED:
- พยายามที่จะ
CREATE
หรือDROP
ตารางหรือดัชนีในขณะที่SELECT
คำสั่งยังคงค้างอยู่- กำลังพยายามเขียนลงในตารางในขณะที่ a
SELECT
กำลังทำงานบนตารางเดียวกัน- พยายามทำสองอย่าง
SELECT
ในตารางเดียวกันในเวลาเดียวกันในแอปพลิเคชันแบบมัลติเธรดถ้า sqlite ไม่ได้ถูกตั้งค่าให้ทำเช่นนั้น- fcntl (3, F_SETLK การเรียกใช้ไฟล์ DB ล้มเหลวซึ่งอาจเกิดจากปัญหาการล็อค NFS ตัวอย่างหนึ่งวิธีแก้ปัญหาสำหรับปัญหานี้คือการลบ mv ออกและคัดลอกกลับเพื่อให้มีค่า Inode ใหม่
ดังนั้นฉันต้องการชี้แจงให้ตัวเองจำเป็นต้องหลีกเลี่ยงการล็อคหรือไม่ ฉันสามารถอ่านและเขียนในเวลาเดียวกันจากสองกระทู้ที่แตกต่างกันได้หรือไม่ ขอบคุณ
isolation_level=None
แม้ว่า หากไม่มีโหมดแคชที่แชร์ฉันจะแชร์อินสแตนซ์ระหว่างเธรดได้อย่างไร