SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.10.2007 13:21:22

SSS
Участник
Зарегистрирован: 30.10.2007
Сообщений: 3

Изменение полей таблицы через временной интервал.

Здравствуйте!

Задача.
В таблицу добавляется запись. Через время Х она должна быть перенесена в другую таблицу.

Можно ли сделать это не используя С++, а только средствани mysql? Если да, то как?)

Заранее благодарен.

Неактивен

 

#2 30.10.2007 14:29:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Изменение полей таблицы через временной интервал.

Можно.

Вариант 1. Вешаете триггер на insert, в нем временую задержку на время X. Плюс, что запись будет перенесена точно через время X, однако запись всё это время будет залоченаsmile Оно Вам надо?

Вариант 2. Вызываете из крона процедуру, которая выбирает какие записи нужно перенести на данный момент.

Оба варианта возможны только с версии 5.0

Неактивен

 

#3 30.10.2007 17:18:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Изменение полей таблицы через временной интервал.

Висящие триггеры - не лучший вариант. По крону можно запускать транзакцию, которая делает требуемое.

Неактивен

 

#4 30.10.2007 18:22:13

SSS
Участник
Зарегистрирован: 30.10.2007
Сообщений: 3

Re: Изменение полей таблицы через временной интервал.

Простите мою безграмотность, но я не знаю, что означает "Вызываете из крона процедуру". Т.е. не знаю что такое "крон". (
И почему висячие тригеры не лучший вариант?

Неактивен

 

#5 30.10.2007 20:04:35

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Изменение полей таблицы через временной интервал.

cron - это программа в unix среде.
предназначена для запуска программ по расписанию. Доументации по ней в поисковых системах пруд пруди...

самый простейший вариант решения вашей задачи написать shell-скрипт, типа такого

#!/bin/sh
mysql -e "DELETE FROM table WHERE _кртерий_удаления_"

который будет запускаться например раз в пять минут и вытирать устаревшие по критерию записи.

Неактивен

 

#6 30.10.2007 20:47:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Изменение полей таблицы через временной интервал.

Если требуется не просто удалять, а переносить в другую таблицу, то скрипт будет несколько сложнее:
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;"

Транзакция требуется, так как условие связано со временем и желательно проверять его только один раз при вставлении данных во временную таблицу.

Неактивен

 

#7 30.10.2007 20:50:56

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Изменение полей таблицы через временной интервал.

Висящий триггер не очень элегантное решение, так как он может удерживать блокировки. В будущих версиях MySQL планируется ввести аналог встроенного cron.

Неактивен

 

#8 31.10.2007 01:25:37

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Изменение полей таблицы через временной интервал.

rgbeast написал:

Висящий триггер не очень элегантное решение, так как он может удерживать блокировки. В будущих версиях MySQL планируется ввести аналог встроенного cron.

триггер еще и плох тем, что если записей в эту таблицу не делать, то и удаления в заданное время не произойдет.
Конечно если X - это пара дней, а пишут в таблицу несколько раз в секунду - то это не страшная неприятность, но условий задачи нам неизвестно.

А разве Scheduler это не оно?

Отредактированно Shopen (31.10.2007 01:26:05)

Неактивен

 

#9 31.10.2007 01:49:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Изменение полей таблицы через временной интервал.

Shopen написал:

А разве Scheduler это не оно?

Да точно, не замечал раньше. Значит в 5.1 уже cron не потребуется для таких задач
http://dev.mysql.com/doc/refman/5.1/en/ … event.html

Неактивен

 

#10 31.10.2007 09:03:26

SSS
Участник
Зарегистрирован: 30.10.2007
Сообщений: 3

Re: Изменение полей таблицы через временной интервал.

Спасибо, господа! Как говорил дедушка Ленин: "Учиться, учиться и еще раз учиться")

А моя задача такова. Пишу игру -  текстовая космическая стратегия для инета. Игрок выбирает технологию для исследования из таблицы вселенских технологий. Исследование занимает время Х. И по его окончанию нужно перенести запись этой технологии в таблицу исследованных технологий игрока.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson