در یک تراکنش SQL یک سفارش جدید در جدول orders درج کن و موجودی (stock) محصول مربوطه در جدول products را کاهش بده، سپس تراکنش را با COMMIT نهایی کن.
5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:38 0.0
برای حل مسئله ابتدا با BEGIN یا START TRANSACTION تراکنش را آغاز کن، سپس INSERT INTO orders برای افزون سفارش و UPDATE products SET stock = stock - مقدار WHERE id = شناسهمحصول را اجرا کن؛ برای جلوگیری از شرایط رقابتی از SELECT ... FOR UPDATE یا قفلگذاری ردیفها استفاده کن. در صورت بروز خطا ROLLBACK اجرا کن و در پایان در MySQL یا PostgreSQL از COMMIT برای ثبت نهایی تغییرات استفاده کن.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای جلوگیری از شرایط رقابتی، تراکنش را با BEGIN یا START TRANSACTION آغاز کنید و سطح ایزولیشن مناسب را رعایت کنید. از SELECT … FOR UPDATE برای قفلکردن ردیف محصول استفاده کنید تا stock همزمان دو بار کم نشود. پس از افزودن سفارش در orders، مقدار stock را در همان تراکنش با UPDATE products SET stock = stock - مقدار WHERE id = شناسه_محصول بهروزرسانی کنید و در پایان با COMMIT تغییرات را ثبت کنید. اگر در هر گام خطایی رخ داد، با ROLLBACK تراکنش را بازگردانید و خطا را مطابق با منطق برنامه مدیریت کنید.
گزارش