SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 05.11.2009 06:32:16

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

очистка базы данных

Как на MySQL 5.0 организовать очистку от старых записей. Хочу например чтобы база имела 500 записей и не больше. При добавлении очередной старая запись должна удалятся. На MSSQL 2000 я это делал с помощью триггера, но вот пришлось столкнуться с MySQL. Потратил день на поиске в интернете, так и не нашел рабочего примера.

Я так понимаю что можно сделать процедуру или триггер. Мне больше по душе триггер - пробывал так сделать

В MySQL Administrator в Query Browser ввожу

create trigger `del_str` after insert on `mazut`
for each row
begin
  select count(*) into @n from mazut;
  if @n > 500 then begin
    select min(idmazut) into @min from mazut;
    delete from mazut where idmazut = @min;
    end;
  end if;
end;

На выполнение запроса - ошибка 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near '' at line 4

Надо ли объявлять где то переменные и как?..
Может ли триггер работать в той же самой таблице? В примерах которые я нашел триггер выполняет действия в другой таблице
Help!!!

Неактивен

 

#2 05.11.2009 07:18:17

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

Re: очистка базы данных

По умолчанию ; является разделителем и происходт попытка выполнить первые 4 строчки как отдельную команду, отсюда и ошибка 1064.

Нужно.

delimiter $$
create trigger `del_str` after insert on `mazut`
for each row
begin
  select count(*) into @n from mazut;
  if @n > 500 then begin
    select min(idmazut) into @min from mazut;
    delete from mazut where idmazut = @min;
    end;
  end if;
end$$


Использованные вами пользовательские переменные объявлять не нужно.
Однако данный триггер работать не будет.
" Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."
http://dev.mysql.com/doc/refman/5.0/en/ … tions.html

Неактивен

 

#3 05.11.2009 09:07:23

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

Re: очистка базы данных

как же мне тогда поступить?

Неактивен

 

#4 05.11.2009 09:37:56

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

Re: очистка базы данных

Добавлять данные с помощью процедуры, которая будет удалять лишние при этом.

Неактивен

 

#5 05.11.2009 10:05:16

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

Re: очистка базы данных

данные добавляются через odbc...сторонняя программа выполняет insert и данные поступают в таблицу mazut.

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

Спасибо за оперативные ответы

Неактивен

 

#6 05.11.2009 11:14:33

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

Re: очистка базы данных

В 5.1 есть планировщик событий, но сам никогда не пользовался, поэтому ничего конкретного сказать не могу.
http://dev.mysql.com/doc/refman/5.1/en/ … rview.html

Подробнее о синтаксисе создания процедур:
http://dev.mysql.com/doc/refman/5.1/en/ … edure.html

Неактивен

 

Board footer

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