English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
القفل يستخدم في المقام الأول للحفاظ على توافق بيانات قاعدة البيانات، يمكن منع المستخدمين من تعديل سطر أو جدول كامل، ويُستخدم عادةً في قواعد البيانات ذات معدل التوازي العالي.
عندما يتم الوصول إلى قاعدة البيانات من قبل مستخدمين متعددين، قد يحدث دون التحكم في العمليات المتوازية قراءة وتبسيط بيانات غير صحيحة، مما يؤدي إلى تدمير توافق قاعدة البيانات.
هناك نوعان رئيسيان من القفل في قاعدة البيانات: القفل الحصري (Exclusive Locks) والقفل المشترك (Share Locks).
إذا تم إضافة قفل حصري على العنصر البياني، لا يمكن للعناصر الأخرى قراءته أو تعديله.
إذا تم إضافة قفل مشترك، يمكن للعناصر الأخرى في قاعدة البيانات قراءتها، ولكن لا يمكن تعديلها.
النحو الأساسي لأمر LOCK هو كالتالي:
LOCK [ TABLE ] name IN lock_mode
name: اسم الجدول الموجود الذي يتم قفله (اختياري مع نمط). إذا تم تحديد الاسم فقط قبل الاسم، يتم قفل الجدول فقط. إذا لم يتم تحديد أي شيء، يتم قفل الجدول وكافة الجداول الفرعية (إذا كانت موجودة).
lock_mode: يحدد نمط القفل مع أي قفل يتعارض معه. إذا لم يتم تحديد نمط القفل، يتم استخدام نمط الوصول المحدود الأكبر. القيم الممكنة هي: ACCESS SHARE،ROW SHARE، ROW EXCLUSIVE، SHARE UPDATE EXCLUSIVE، SHARE،SHARE ROW EXCLUSIVE،EXCLUSIVE،ACCESS EXCLUSIVE.
بمجرد الحصول على القفل، سيظل القفل موجودًا طوال وقت العملية الحالية. لا توجد أوامر لفتح الجداول؛ القفل يتم إطلاقه دائمًا عند انتهاء العملية.
عندما يتوقعان العمليات المتبادلة انتهاء عملياتها، قد يحدث عائق. على الرغم من أن PostgreSQL يمكنه اكتشافها وإنهاءها بالتراجع، إلا أن العائق غير مريح. من أجل منع تطبيق البرنامج من مواجهة هذه المشكلة، تأكد من تصميم التطبيق لتشغيل الأدوات المختلفة بنفس الترتيب.
يقدم PostgreSQL طريقة لإنشاء قفل يحمل معاني تعريفية للتطبيق. هذه تُدعى قفل الإستشارة. نظرًا لأن النظام لا يلزم استخدامها، فإن استخدامها بشكل صحيح يعتمد على التطبيق. القفل الإستشارة مفيد جدًا للإستراتيجيات التي لا تناسب نموذج MVCC.
على سبيل المثال، استعلامات القفل الشائعة هي محاكاة استراتيجية القفل السلبي التقليدية في نظام إدارة بيانات "ملفات مسطحة". على الرغم من أن العلامات المخزنة في الجدول يمكن استخدامها لأغراض مشابهة، إلا أن القفل السريع أسرع ويقلل من تضخم الجدول، ويتم تنظيفه تلقائيًا من قبل الخادم عند انتهاء الجلسة.
إنشاء جدول COMPANYتحميل ملف SQL لـ COMPANY )، المعلومات التالية:
w3codeboxdb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall | 45000 7 | James | 24 | Houston | 10000 (7 rows)
النموذج التالي سيلزمLOCK TABLE في قاعدة البياناتw3codeboxdb الشركة TABLE في نمطACCESS EXCLUSIVE.
جملة LOCK تعمل فقط في نمط المعاملة.
w3codeboxdb=#BEGIN; LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;
العمل المذكور سينتج النتيجة التالية:
LOCK TABLE
الرسالة العلوية تشير إلى أن الجدول محكوم حتى انتهاء المعاملة، وأنه لإنهاء المعاملة يجب عليك التراجع أو تقديم المعاملة.