একজন কীভাবে সঠিকভাবে মাইএসকিউএলে আশাবাদী লকিং প্রয়োগ করে?
আমাদের দলটি অনুমান করেছে যে আমাদের অবশ্যই নীচে # 4 করা উচিত অন্যথায় একটি ঝুঁকি রয়েছে যে অন্য থ্রেড রেকর্ডের একই সংস্করণটি আপডেট করতে পারে, তবে আমরা যাচাই করতে চাই যে এটি করার সর্বোত্তম উপায়।
- আপনি যেমন টেবিলের জন্য আশাবাদী লকিং ব্যবহার করতে চান সারণীতে একটি সংস্করণ ক্ষেত্র তৈরি করুন যেমন কলামের নাম = "সংস্করণ"
- নির্বাচনের সময়, সংস্করণ কলামটি অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন এবং সংস্করণটির নোট তৈরি করুন
- রেকর্ডের পরবর্তী আপডেটে, আপডেট বিবৃতিটি "যেখানে সংস্করণ = এক্স" জারি করা উচিত যেখানে এক্সটি আমাদের # 2-এ প্রাপ্ত সংস্করণ এবং X + 1 এ আপডেটের বিবৃতি চলাকালীন সংস্করণ ক্ষেত্রটি সেট করা উচিত
SELECT FOR UPDATE
আমরা যে রেকর্ডটি আপডেট করতে যাচ্ছি তার একটি সম্পাদন করুন যাতে আমরা সিরিয়ালাইজ করি যে আমরা যে রেকর্ডটি আপডেট করার চেষ্টা করছি তা পরিবর্তন করতে পারে।
স্পষ্ট করার জন্য, আমরা দুটি থ্রেড প্রতিরোধ করার চেষ্টা করছি যা একই সময় উইন্ডোতে একই রেকর্ড নির্বাচন করে যেখানে তারা একই সময়ে রেকর্ডটি চেষ্টা করে আপডেট করতে চাইলে তারা একে অপরকে ওভাররাইট করা থেকে রেকর্ডের একই সংস্করণটি দখল করে। আমরা বিশ্বাস করি যে আমরা # 4 না করা পর্যন্ত একটি সুযোগ রয়েছে, যদি উভয় থ্রেড একই সাথে স্ব স্ব লেনদেনগুলি প্রবেশ করে (তবে এখনও তাদের আপডেট জারি করেনি), যখন তারা আপডেট করতে যায়, দ্বিতীয় থ্রেড যা আপডেটটি ব্যবহার করবে ... যেখানে সংস্করণ = এক্স পুরানো ডেটাতে কাজ করবে।
আমরা সংস্করণ ক্ষেত্রগুলি / আশাবাদী লকিং ব্যবহার করেও আপডেট করার সময় আমাদের কী এই निराদবাদী লকিং করা উচিত তা ভেবে কী সঠিক?
SELECT ... FOR UPDATE
, ভার্সন উভয় না সারি বা আশাবাদী লকিং। উত্তরে বিস্তারিত দেখুন।