"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن تنفيذ القفل المتفائل في MySQL؟

كيف يمكن تنفيذ القفل المتفائل في MySQL؟

تم النشر بتاريخ 2024-11-07
تصفح:801

How Can Optimistic Locking be Implemented in MySQL?

القفل المتفائل في 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