با استفاده از تابع GET_LOCK در MySQL یک اسکریپت بنویسید که قبل از بهروزرسانی یک رکورد در جدول users با id=123 ابتدا قفل با نام 'update_user_123' را با timeout پنج ثانیه بگیرد، سپس فیلد email را تغییر دهد و در پایان قفل را آزاد کند.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:12 0.0
برای حل این سوال از توابع سیستمی GET_LOCK و RELEASE_LOCK در MySQL استفاده کنید: ابتدا با SELECT GET_LOCK('update_user_123', 5) بررسی کنید که مقدار بازگشتی برابر 1 است (قفل گرفته شده)، سپس دستور UPDATE را اجرا کنید و در پایان با SELECT RELEASE_LOCK('update_user_123') قفل را آزاد کنید. دقت کنید همهی عملیات باید در یک کانکشن انجام شود چون قفلها به کانکشن وابستهاند؛ همچنین اگر GET_LOCK موفق نبود باید از اجرای UPDATE صرفنظر کنید یا خطای مناسب برگردانید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته این است که GET_LOCK و RELEASE_LOCK فقط در یک کانکشن کار میکنند، پس کل منطق قفل باید در یک جلسه اجرا شود. اگر GET_LOCK('update_user_123', 5) برابر با 1 بود، عملیات UPDATE را انجام دهید؛ در غیر این صورت بهروزرسانی را انجام ندهید یا خطای مناسب بدهید. پس از UPDATE حتماً RELEASE_LOCK('update_user_123') را صدا بزنید تا قفل آزاد شود. برای جلوگیری از مشکلات، این عملیات را در یک تراکنش یا اسکریپت واحد نگه دارید تا پایداری همگامسازی حفظ شود.
گزارش