SQLite

2012-06-08 6 views
5

में स्पष्ट लॉकिंग तंत्र तालिका में पंक्तियों को डालने या अपडेट करने से पहले मुझे स्पष्ट स्क्लाइट लॉकिंग आदेश नहीं मिला। क्या स्क्लाइट लॉकिंग तंत्र को स्वयं ही संभालता है? http://sqlite.org/lockingv3.html में वर्णित पेजर मॉड्यूल लॉकिंग तंत्र को संभालता है। लेकिन मुझे यकीन नहीं है कि क्या कोई आदेश है जो उपयोगकर्ता टेबल को स्पष्ट रूप से लॉक करने के लिए उपयोग कर सकता है। कृपया सलाह दें।SQLite

धन्यवाद

उत्तर

12

जहाँ तक मुझे पता के रूप में वहाँ कोई समर्पित SQLite लॉकिंग को नियंत्रित करने के आदेश हैं। हालांकि आप create transaction का उपयोग कर डेटाबेस को लॉक करने के लिए sqlite प्राप्त कर सकते हैं। उदाहरण के लिए:

BEGIN IMMEDIATE TRANSACTION; 
... 
COMMIT TRANSACTION; 

BEGIN EXCLUSIVE TRANSACTION; 
... 
COMMIT TRANSACTION; 

आप प्रलेखन मैं जुड़ा हुआ आप IMMEDIATE & EXCLUSIVE लेनदेन के बीच अंतर पर एक बेहतर विचार प्राप्त करना चाहिए पढ़ें।

यह ध्यान देने योग्य हो सकता है कि एसक्लाइट में ताले पूरे डेटाबेस पर लागू होते हैं, न कि केवल व्यक्तिगत टेबल पर, LOCK TABLE अन्य एसक्यूएल डेटाबेस में कथन के विपरीत।

8

SQLite आपके एसक्यूएल स्टेटमेंट का वर्णन करने वाली लेनदेन योजना को लागू करने के लिए जो भी लॉकिंग आवश्यक है, करता है। विशेष रूप से, यदि आप किसी का वर्णन नहीं करते हैं तो आपको प्रत्येक कथन की अवधि के लिए लॉक के साथ ऑटो-प्रतिबद्ध व्यवहार मिलता है और फिर कथन समाप्त होने के बाद छोड़ दिया जाता है। यदि आपको लंबे लेनदेन की आवश्यकता हो (अक्सर सच है!) तो आप उन्हें BEGIN TRANSACTION (अक्सर BEGIN तक छोटा कर दें) के साथ पूछें और COMMIT TRANSACTION (या ROLLBACK TRANSACTION) के साथ समाप्त करें। लेन-देन हैंडलिंग अक्सर आपके भाषा इंटरफ़ेस द्वारा आपके लिए लपेटा जाता है (क्योंकि यह सही होने के लिए काफी आसान बनाता है, लेनदेन जीवनकाल को कोड ब्लॉक या विधि कॉल में जोड़ता है) लेकिन आधार स्तर पर, यह BEGIN/COMMIT/ROLLBACK पर आता है ।

संक्षेप में, आपके पास लेनदेन हो गए हैं। तालाबों का उपयोग लेनदेन को लागू करने के लिए किया जाता है। आपके पास कच्चे ताले नहीं हैं (जो एक अच्छी बात है; वे पहले नज़र से सोचने के बजाय सही होने के लिए कठिन हैं)।