PDA

View Full Version : خالی کردن یک جدول mysql هر 1 ساعت در php



ashokri.nll
چهارشنبه 07 اسفند 1392, 06:08 صبح
سلام آقا من میخام یه جدول تو بانک اطلاعاتیمو هر 1 ساعت خودکار پاک کنم لطفا کدشو بهم بدید مرسی

مهرداد سیف زاده
چهارشنبه 07 اسفند 1392, 07:17 صبح
CREATE EVENT `clearMyTable` ON SCHEDULE EVERY 1 HOUR DO TRUNCATE TABLE `users`

بجای clearMyTable نام دلخواه و بجای tblName نام جدول خودتون رو بزارید.

ashokri.nll
چهارشنبه 07 اسفند 1392, 13:02 عصر
الان یه سوال من یه جدول دارم به user و اسم بانک اصلی chat هست میخام اینو هر 1 ساعت پاک کنه اینو چی جوری باید استفاده کنم و تو کجا بزارم ؟

MMSHFE
چهارشنبه 07 اسفند 1392, 13:38 عصر
این کوئری رو توی phpmyadmin روی سرورتون درحالیکه وارد دیتابیس شدین (جدولها رو بهتون نشون میده)، در سربرگ SQL اجرا کنید (یکبار کافیه) :
CREATE EVENT `deleteAll` ON SCHEDULE EVERY 1 HOUR DO TRUNCATE TABLE `users`

ashokri.nll
چهارشنبه 07 اسفند 1392, 15:30 عصر
یه سوال این اطلاعات رو پاک میکنه یا جدولو ؟

MMSHFE
چهارشنبه 07 اسفند 1392, 15:46 عصر
نه Drop که نیست که کلاً جدول رو حذف کنه. Truncate هست یعنی فقط رکوردهای داخلش رو حذف میکنه و جدول رو خالی میکنه.

ashokri.nll
شنبه 17 اسفند 1392, 18:38 عصر
دوستان اگه بخام با یه شرط خاصی هر 1 ساعت پاک کنه چی مثلا هر کی user_type برابر gost بود هر 1 ساعت پاک بشه

MMSHFE
یک شنبه 18 اسفند 1392, 10:53 صبح
خوب اونوقت TRUNCATE نباید بگذارین و باید از DELETE FROM استفاده کنید:
CREATE EVENT `deleteAll` ON SCHEDULE EVERY 1 HOUR DO DELETE FROM `users` WHERE (`user_type`='ghost');

MMSHFE
یک شنبه 18 اسفند 1392, 11:02 صبح
البته یک نکته هم بد نیست گفته بشه و اونهم تفاوت TRUNCATE و DELETE FROM بدون شرط هست چون هر دو کار نسبتاً مشابهی انجام میدن ولی تفاوتهای زیر رو هم دارن:
1- TRUNCATE سریعتر از DELETE FROM هست چون بجای حذف تک تک رکوردها، کلاً جدول رو حذف میکنه و دوباره با همون ساختار قبلی میسازه.
2- اگه توی جدولتون فیلد Auto Increment دارین (مثل ID)، استفاده از TRUNCATE باعث میشه دوباره از 1 شماره بزنه (چون جدول دوباره ساخته میشه) و اگه رکوردهای متناظر با رکوردهای قبلی این جدول رو در جداول دیگه که باهاش ارتباط دارن، حذف نکرده باشین، به مشکل برخورد میکنید (فرضاً ممکنه دانشجو توی سیستم شما تازه ثبت نام کنه و یهو ببینه 10 واحد افتاده که این واحدها در اصل مربوط به دانشجوی دیگری بوده که با همین ID توی دیتابیس شما قبلاً وجود داشته). راه حل این مسئله هم استفاده از Relationها توسط کلیدهای خارجی و گذاشتن قید CASCADE برای DELETE هست که باعث میشه با حذف یک دانشجو، تمام رکوردهای متناظرش در جدول دیگه هم حذف بشه. مثال:
ALTER TABLE `grades` ADD CONSTRAINT `fk_grade_student` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;