نوشته شده توسط
master_pro
یک سری جدول دارم که کاربران بسیار زیادی فیلدهائیو امکان داره در زمان یکسان سعی در تغییرشون داشته باشند
به عنوان مثال امکان داره در یک زمان 100 هزار نفر بخواهند اگر فیلد B وجود دارد فیلد B را حذف کنند و مقدار فیلد A را 1 واحد افزایش دهند
فقط کافیه 2 نفر از این 100 هزار نفر همزمان مشاهده کنند فیلد B وجود دارد و سپس بروند برای حذف آن و اضافه کردن به مقدار A
در این شرایط مقدار فیلد A بیش از 1 واحد افزایش پیدا می کند و اشکال شدیدی به وجود می آید
سلام
در مبحث دیتابیس مفهومی به عنوان تراکنش داریم.
برای اینکه به مقدار فیلد آ دوبار اضافه نشه باید حذف فیلد بی و افزایش مقدار آ در یک تراکنش انجام شود و کوئری های بعدی پس از پایان کامل این تراکنش انجام شوند.
برای ایجاد تراکنش می توانید از دستورات زیر استفاده کنید: (کوئری ها و دستورات تنها جهت رساندن مفهوم نوشته شده اند)
mysqli_begin_transaction($link);
//q1
$result = mysqli_query($link, "select B from table");
if(!empty($B)){
//q2
mysqli_query($link, "delete value of field B");
//q3
mysqli_query($link, "increase value of A");
}
mysqli_commit($link);
نتیجه کوئری های 2 و 3 هم مهم است اگر به هر دلیل مقدار یکی از آنها false باشد باید rollback کنید. در ضمن لازمه از try catch هم استفاده کنید تا اگر خطایی رخ داد rollback کنید.
توضیحات دستورات زیر را در منوال php مطالعه فرمایید.
mysqli_begin_transaction
mysqli_commit
mysqli_rollback
mysqli_autocommit