القفل المتفائل في MySQL: شرح شامل
القفل المتفائل هو تقنية مستخدمة في أنظمة إدارة قواعد البيانات لمنع تعارض البيانات التي قد تنشأ عندما يحاول العديد من المستخدمين تحديث نفس البيانات بشكل متزامن. على الرغم من أن MySQL لا تدعم القفل المتفائل أصلاً، إلا أنه يمكن تنفيذه باستخدام تعليمات SQL القياسية.
فهم المفهوم
يعمل القفل المتفائل على افتراض أنه من غير المرجح أن تعمل البيانات يمكن تعديلها بشكل متكرر من قبل العديد من المستخدمين. بدلاً من الحصول على أقفال على البيانات، تسمح هذه التقنية بالتحديثات المتزامنة، ولكنها تتحقق من التعارضات قبل تنفيذ التغييرات.
التنفيذ في MySQL
إحدى طرق التنفيذ المتفائلة يتم القفل في MySQL عن طريق إضافة عمود إصدار إلى الجدول. عند تحديث صف، تتم زيادة عمود الإصدار. قبل إجراء أي تحديث، يتحقق التطبيق من تطابق رقم الإصدار الحالي مع رقم الإصدار المخزن في الصف وقت بدء التحديث. إذا تطابقت الأرقام، يتم الالتزام بالتحديث؛ وإلا، فسيحدث تعارض ويجب على التطبيق التعامل معه بشكل مناسب.
مثال التعليمات البرمجية يوضح مقتطف التعليمات البرمجية التالي القفل المتفائل باستخدام عمود الإصدار:
-- حدد الصف ونسخته حدد val1، val2، الإصدار من الجدول حيث المعرف = @theId؛ - حساب القيم الجديدة -- ... - تحديث الجدول والتحقق من الإصدار تحديث الجدول تعيين val1 = @newVal1، فال2 = @newVal2، الإصدار = الإصدار 1 أين المعرف = @theId والنسخة = @oldversion؛ - التحقق من وجود الصفوف المتأثرة إذا @@ROWCOUNT = 1 - الالتزام بالتغييرات -- ... آخر - التعامل مع الاصطدام -- ... END IF;-- Select the row and its version
SELECT val1, val2, version
FROM theTable
WHERE iD = @theId;
-- Calculate new values
-- ...
-- Update the table, checking the version
UPDATE theTable
SET val1 = @newVal1,
val2 = @newVal2,
version = version 1
WHERE iD = @theId
AND version = @oldversion;
-- Check for affected rows
IF @@ROWCOUNT = 1
-- Commit the changes
-- ...
ELSE
-- Handle collision
-- ...
END IF;
المعاملات مقابل عدم المعاملاتيمكن تنفيذ القفل المتفائل مع أو بدون المعاملات. يوفر استخدام المعاملات القدرة على التراجع عن كافة التغييرات في حالة مواجهة تصادم، ولكنه قد يؤدي أيضًا إلى فرض قيود على التزامن. يعتمد القفل المتفائل غير المعاملات على عمود الإصدار لاكتشاف التعارضات، ويعالجها دون الحاجة إلى المعاملات.
الاستنتاج
القفل المتفائل ليس مدمجًا ميزة MySQL، ولكن يمكن تنفيذها باستخدام تعليمات SQL القياسية. من خلال إضافة عمود إصدار إلى الجدول، يمكن للتطبيقات إجراء قفل متفائل واكتشاف التعارضات قبل تنفيذ التحديثات، مما يضمن اتساق البيانات في البيئات المتزامنة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3