![]() |
![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Задача.
В таблицу добавляется запись. Через время Х она должна быть перенесена в другую таблицу.
Можно ли сделать это не используя С++, а только средствани mysql? Если да, то как?)
Заранее благодарен.
Неактивен
Можно.
Вариант 1. Вешаете триггер на insert, в нем временую задержку на время X. Плюс, что запись будет перенесена точно через время X, однако запись всё это время будет залочена Оно Вам надо?
Вариант 2. Вызываете из крона процедуру, которая выбирает какие записи нужно перенести на данный момент.
Оба варианта возможны только с версии 5.0
Неактивен
Висящие триггеры - не лучший вариант. По крону можно запускать транзакцию, которая делает требуемое.
Неактивен
Простите мою безграмотность, но я не знаю, что означает "Вызываете из крона процедуру". Т.е. не знаю что такое "крон". (
И почему висячие тригеры не лучший вариант?
Неактивен
cron - это программа в unix среде.
предназначена для запуска программ по расписанию. Доументации по ней в поисковых системах пруд пруди...
самый простейший вариант решения вашей задачи написать shell-скрипт, типа такого
#!/bin/sh
mysql -e "DELETE FROM table WHERE _кртерий_удаления_"
который будет запускаться например раз в пять минут и вытирать устаревшие по критерию записи.
Неактивен
Если требуется не просто удалять, а переносить в другую таблицу, то скрипт будет несколько сложнее:
mysql -e "SET @@auto_commit=0; BEGIN; CREATE TEMPORARY TABLE a SELECT * FROM table WHERE критерий_переноса"; INSERT INTO other_table SELECT * FROM a; DELETE FROM table USING table,a WHERE table.id=a.id; COMMIT;"
Транзакция требуется, так как условие связано со временем и желательно проверять его только один раз при вставлении данных во временную таблицу.
Неактивен
Висящий триггер не очень элегантное решение, так как он может удерживать блокировки. В будущих версиях MySQL планируется ввести аналог встроенного cron.
Неактивен
rgbeast написал:
Висящий триггер не очень элегантное решение, так как он может удерживать блокировки. В будущих версиях MySQL планируется ввести аналог встроенного cron.
триггер еще и плох тем, что если записей в эту таблицу не делать, то и удаления в заданное время не произойдет.
Конечно если X - это пара дней, а пишут в таблицу несколько раз в секунду - то это не страшная неприятность, но условий задачи нам неизвестно.
А разве Scheduler это не оно?
Отредактированно Shopen (31.10.2007 01:26:05)
Неактивен
Shopen написал:
А разве Scheduler это не оно?
Да точно, не замечал раньше. Значит в 5.1 уже cron не потребуется для таких задач
http://dev.mysql.com/doc/refman/5.1/en/ … event.html
Неактивен
Спасибо, господа! Как говорил дедушка Ленин: "Учиться, учиться и еще раз учиться")
А моя задача такова. Пишу игру - текстовая космическая стратегия для инета. Игрок выбирает технологию для исследования из таблицы вселенских технологий. Исследование занимает время Х. И по его окончанию нужно перенести запись этой технологии в таблицу исследованных технологий игрока.
Неактивен