با استفاده از تابع 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 صرف‌نظر کنید یا خطای مناسب برگردانید.

توسط پژوهشگر در 221 روز قبل ساعت 01:12
دسته بندی ها: MySQL MySQL for beginner
sara در 221 روز قبل ساعت 14:13

نکته این است که GET_LOCK و RELEASE_LOCK فقط در یک کانکشن کار می‌کنند، پس کل منطق قفل باید در یک جلسه اجرا شود. اگر GET_LOCK('update_user_123', 5) برابر با 1 بود، عملیات UPDATE را انجام دهید؛ در غیر این صورت به‌روزرسانی را انجام ندهید یا خطای مناسب بدهید. پس از UPDATE حتماً RELEASE_LOCK('update_user_123') را صدا بزنید تا قفل آزاد شود. برای جلوگیری از مشکلات، این عملیات را در یک تراکنش یا اسکریپت واحد نگه دارید تا پایداری همگام‌سازی حفظ شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری