LINUX.ORG.RU

Знатокам perl и MySQL


0

0

Задача:
Есть две таблицы, с одинаковыми полями, назовем их table и table_tmp.
У них есть поле, время создания записи. Когда запись создается, она ложится в table_tmp и должна полежать там 5 секунд и после этого демон на перле должен перенести ее в таблицу table.
Нежели самое оптимальное это пробижаться по table_tmp, выбрать нужные записи из table_tmp, потом в одной транзакции по одной удалить их с table_tmp и добавить в table?
Можно ли как то одним выражением сказать вот эти все добавь сюда, а другим выражение вот эти все удали отсюда?

PS
MySQL версии 3


1. Определяешь нужное время
2. INSERT INTO `table` (fld1, fld2) SELECT fld1, fld2 FROM `table_tmp` WHERE time <= ?;
3. DELETE FROM `table_tmp` WHERE time <= ?;
4. COMMIT;

UncleAndy ★★★
()
Ответ на: комментарий от UncleAndy


$dbh = DBI->connect($DB_CONN, $DB_USER, $DB_PASSWORD,
{
RaiseError => 1,
AutoCommit => 0
}
);



my $sql = 'SET @t=now();
INSERT INTO table(...)
SELECT .....
FROM table_tmp
WHERE (@t > date_add(Created, INTERVAL 5 SECOND));

DELETE FROM table_tmp
WHERE (@t > date_add(Created, INTERVAL 5 SECOND));';

my $sth=$dbh->prepare($sql);
$sth->execute();
$sth->finish();


Проблема:
Когда в $sql один select или delete - все работает, но когда все вместе ругается на второй запрос, в данной случае на INSERT,
если убрать SET @t=now();, то INSERT прохавает, будет ругаться на DELETE.

tukan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.