मैं टेबल को लॉक करने और/या इसे लेनदेन में करने की कोशिश करना भूल जाऊंगा, इसके लिए एक बेहतर पैटर्न है:
- एक अद्वितीय टोकन जेनरेट करें
- उस टोकन को अगले उपलब्ध रिकॉर्ड में असाइन करें
- पढ़ें कि किस पंक्ति को टोकन मिला है, और इसे संसाधित करें
इस तरह आपको लॉकिंग और लेन-देन की बिल्कुल भी आवश्यकता नहीं है (क्योंकि DB आपके टोकन को केवल एक अप्रयुक्त रिकॉर्ड के लिए असाइन करेगा)।
छद्म कोड:
$token = time(); //Only you have very low concurrency. Otherwise use something more unique, like a GUID or an identity value from a tokens table.
EXEC SQL: "UPDATE mytable SET token = $token WHERE token IS NULL LIMIT 1"
EXEC SQL: "SELECT id FROM mytable WHERE token = $token"
process($id);