PDA

View Full Version : سوال: قفل کردن دیتابیس LOCK ...



prans.info
شنبه 31 خرداد 1393, 19:22 عصر
سلام وقت بخیر
برای یه چرخه نیاز هست که نوشتن در یک جدول خاص قفل بشه تا از تکرار جلوگیری بشه ...
از منابع انگلیسی نتونستم بهره ببرم (ضعف در زبان) و نمونه کئوری که پیدا کردم احساس می کنم کلا دیتا بیس رو قفل می کنه .
به یه کئوری نیاز دارم که نوشتن در یک جدول خاص رو قفل کنه .

prans.info
یک شنبه 01 تیر 1393, 11:05 صبح
دوستان و استادان عزیز لطفا جواب بدید کارم گیره (مای اس کیو ال هاستینگ رو هم 5 ساعت سر این ماجرا دچار مشکل کرده بود :لبخند:)

prans.info
یک شنبه 01 تیر 1393, 18:00 عصر
یکی جواب بده دیگه :عصبانی++:

abolfazl-z
یک شنبه 01 تیر 1393, 21:38 عصر
یکی جواب بده دیگه :عصبانی++:

یکم در مورد transaction در mysql در همین انجمن جستجو کنید کارتون رو راه می اندازد !

prans.info
دوشنبه 02 تیر 1393, 09:08 صبح
یکم در مورد transaction در mysql در همین انجمن جستجو کنید کارتون رو راه می اندازد !
با تشکر از پاسخ شما ...
جستجو کردم ولی چیز خاصی متوجه نشدم لطفا یک مثال در این باره بزنید
از lock که استفاده می کنم همه جدول ها بسته میشه ...

abolfazl-z
دوشنبه 02 تیر 1393, 16:21 عصر
http://barnamenevis.org/showthread.php?427327-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%DA%A9%D8%A7%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%B1%D9%86%D8%B2%DA%A9%D8%B4%D9%86-%D8%A8%D8%AC%D8%A7%DB%8C-%D9%82%D9%81%D9%84

prans.info
دوشنبه 02 تیر 1393, 16:43 عصر
http://barnamenevis.org/showthread.php?427327-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%DA%A9%D8%A7%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%B1%D9%86%D8%B2%DA%A9%D8%B4%D9%86-%D8%A8%D8%AC%D8%A7%DB%8C-%D9%82%D9%81%D9%84
این رو قبلا مطالعه کردم ولی متوجه نشدم ...
شما این کد رو در نظر بگیر :


$num = mysql_num_rows(mysql_query("SELECT `id` FORM `post` WHERE `title`='$title' LIMIT 1"));if($num=='0'){ mysql_query("INSERT INTO `post`(`title`) VALUES ('$title')");}
میخوام وقتی چند درخواست همزمان وجود داره مطلب تکراری نره تو دیتا از چی استفاده کنم؟

abolfazl-z
دوشنبه 02 تیر 1393, 19:07 عصر
mysql_query('START TRANSACTION');
mysql_query("SELECT `title` FORM `post` LOCK IN SHARE MODE");
$num = mysql_num_rows(mysql_query("SELECT `id` FORM `post` WHERE `title`='$title' LIMIT 1"));
if($num=='0'){
mysql_query("INSERT INTO `post`(`title`) VALUES ('$title')");
}
mysql_query('COMMIT');

البته من خودم هم زیاد از ترنزکشن استفاده نکردم.

foreach
دوشنبه 02 تیر 1393, 19:20 عصر
اول اینکه برای جلوگیری از مقدار تکراری بهتره که فیلد مورد نظرتونو Unique کنید
برای اینکه خودتون هم چک کنید و پیام مناسبشو به کاربر نشون بدید, قبل از اینکه مقداری رو در دیتابس بریزید چک کنید که وجود داره یا نه
برای قفل کردن هم میتونید با کد زیر قفل کنید (2 نوع قفل داره) WRITE و READ


LOCK TABLES table_name WRITE|READ

و برای اینکه از قفل در بیارید هم از


UNOCK TABLES

استفاده کنید

prans.info
دوشنبه 02 تیر 1393, 20:16 عصر
اول اینکه برای جلوگیری از مقدار تکراری بهتره که فیلد مورد نظرتونو Unique کنید
برای اینکه خودتون هم چک کنید و پیام مناسبشو به کاربر نشون بدید, قبل از اینکه مقداری رو در دیتابس بریزید چک کنید که وجود داره یا نه
برای قفل کردن هم میتونید با کد زیر قفل کنید (2 نوع قفل داره) WRITE و READ


LOCK TABLES table_name WRITE|READ

و برای اینکه از قفل در بیارید هم از


UNOCK TABLES

استفاده کنید
خیلی ممنون از پاسختون
این کئوری کامل هست ؟
چون وقتی از این کئوری استفاده میشه کلا امکان خواندن از هیچ جدولی محیا نمیشه !!!! و همه جا انگار قفل میشه :عصبانی++:

foreach
دوشنبه 02 تیر 1393, 20:18 عصر
خیلی ممنون از پاسختون
این کئوری کامل هست ؟
چون وقتی از این کئوری استفاده میشه کلا امکان خواندن از هیچ جدولی محیا نمیشه !!!! و همه جا انگار قفل میشه :عصبانی++:
خوب باید قبلا از اینکه کوئری های دیگه ای رو اجرا کنید جدول رو از قفل در بیارید

prans.info
دوشنبه 02 تیر 1393, 20:38 عصر
خوب باید قبلا از اینکه کوئری های دیگه ای رو اجرا کنید جدول رو از قفل در بیارید
وقتی تویه فایل ex.php جدول رو قفل می کنم کل سایت تا تموم شدن کار و باز شدن وای میسته !